将ASCII字符转换为二进制(7位)

时间:2017-01-18 15:29:23

标签: java

我需要将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;

3 个答案:

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