以位为单位转换字符串的每个字符

时间:2014-03-13 16:17:52

标签: java string char ascii bit

 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 } as binary(0000000100000000)。如何让我的程序将字符串中的每个字符视为8位的二进制序列?

基本上,我想将我的数字的每一位都视为一个字节。我这样做byte b = bytes[n];,但程序将其视为ASCII值。

我可以将数字分配给int,但是,我不能将这些位分配给一个字节。

3 个答案:

答案 0 :(得分:0)

这有点混乱,但首先想到的是首先使用char方法将您的消息拆分为toCharArray()值。接下来,使用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.
    }
}

答案 1 :(得分:0)

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;
}

现在bits是一个长度为8的字符串。

1 00000001 10 00000010 11 00000011 100 00000100

您可以在String

上使用getBytes()

答案 2 :(得分:0)

使用Java&#39; s parseInt(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,但是布尔是更好的代表......