[英]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);
}
}
我的问题是,它将1
和0
作为其ASCII值49
和48
,而不是将1
和0
作为其二进制值( 00000001
和00000000
)。 如何使程序将字符串中的每个字符视为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()
使用Java
的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
,但是布尔值是位的更好表示...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.