我需要将ASCII字符转换为(7位)二进制。 我见过this,但它给了我8位的二进制值,同时我希望它是7位。例如:
C
应为1000011
CC
应为10000111000011
%
应为0100101
所以,我把代码更改为:
String s = "%";
byte[] bytes = s.getBytes();
StringBuilder binary = new StringBuilder();
for (int j = 0; j < 7; j++) {
int val = bytes[j];
for (int i = 0; i < 8; i++) {
binary.append((val & 128) == 0 ? 0 : 1);
val <<= 1;
}
binary.append("");
}
System.out.println("'" + s + "' to binary: " + binary);
和它抱怨:
java.lang.ArrayIndexOutOfBoundsException: 1
在该行:
int val = bytes[j];
要突出显示:
我用过
for(int j=0;j<7;j++)
int val = bytes[j];
而不是
for (byte b : bytes)
int val = b;
答案 0 :(得分:3)
更改您的第一个for
循环:
for (int j = 0; j < 7; j++) {
要:
for (int j = 0; j < bytes.length; j++) {
您希望此外循环遍历bytes
的所有元素。
答案 1 :(得分:1)
以下代码中有2项更改:
String s = "%";
byte[] bytes = s.getBytes();
StringBuilder binary = new StringBuilder();
for (int j = 0; j < bytes.length; j++) {
int val = bytes[j];
for (int i = 0; i < 7; i++) {
val <<= 1;
binary.append((val & 128) == 0 ? 0 : 1);
}
}
System.out.println("'" + s + "' to binary: " + binary);
答案 2 :(得分:0)
这里有一些代码可以给你一个提示;它将每个字符作为一个字节,然后使用位掩码沿着每个最低有效7位走。只需添加字符串构建器代码;
public static void main(String[] args) {
String s = "A";
byte[] bytes = s.getBytes();
for (int bytePos = 0; bytePos < bytes.length; ++bytePos) {
byte b = bytes[bytePos];
byte mask = 0b1000000;
while (mask > 0) {
System.out.println(b & mask);
mask /= 2;
}
}
}