簡體   English   中英

以位為單位轉換字符串的每個字符

[英]Convert each character of a string in bits

 String message= "10";
        byte[] bytes = message.getBytes();

        for (int n = 0; n < bytes.length; n++) {
            byte b = bytes[n];

            for (int i = 0; i < 8; i++) {//do something for each bit in my byte
            boolean bit = ((b >> (7 - i) & 1) == 1);
            }
        }

我的問題是,它將10作為其ASCII值4948 ,而不是將10作為其二進制值( 0000000100000000 )。 如何使程序將字符串中的每個字符視為8位二進制序列?

基本上,我想將數字的每一位都當作一個字節。 我這樣做就像byte b = bytes[n]; 但程序會將其視為ASCII值。

我可以將數字分配給一個int,但是然后,我不能將這些位分配給一個字節。

有點混亂,但是首先想到的是,首先要使用toCharArray()方法將消息拆分為char值。 接下來,使用Character.getNumericValue()方法返回int ,最后返回Integer.toBinaryString

String message = "123456";

for(char c : message.toCharArray())
{
    int numVal = Character.getNumericValue(c);
    String binaryString = Integer.toBinaryString(numVal);

    for(char bit : binaryString)
    {
         // Do something with your bits.
    }
}
String msg = "1234";

for(int i=0 ; i<msg.length() ; i++ ){
    String bits = Integer.toBinaryString(Integer.parseInt(msg.substring(i, i+1)));
   for(int j=0;j<8-bits.length();j++)
      bits = "0"+bits;
}

現在,位是一個長度為8的字符串。

1 00000001 10 00000010 11 00000011 100 00000100

您可以在字符串上使用getBytes()

使用JavaparseInt(String s, int radix)

String message= "10";
int myInt = Integer.parseInt(message, 2); //because we are parsing it as base 2

到那時,您具有正確的位序列,並且可以進行位移。

boolean[] bits = new boolean[message.length()];
System.out.println("Parsed bits: ");
for (int i = message.length()-1; i >=0  ; i--) {
    bits[i] = (myInt & (1 << i)) != 0;
    System.out.print(bits[i] ? "1":"0");
}

System.out.println();

如果確實願意,可以將其設置為byte ,但是布爾值是位的更好表示...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM