【问题标题】:Convert ASCII characters to binary (7-bit)将 ASCII 字符转换为二进制(7 位)
【发布时间】:2017-06-03 01:23:23
【问题描述】:

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

【问题讨论】:

  • "%".getBytes() 正在返回 bytes,而不是 bits。您的 bytes 数组中将只有 1 个元素(在索引 0 处)。
  • 字节,整数类型是二进制。您不想转换,而是以二进制形式打印它

标签: java


【解决方案1】:

从以下位置更改您的第一个 for 循环:

for (int j = 0; j < 7; j++) {

收件人:

for (int j = 0; j < bytes.length; j++) {

您希望这个外部循环遍历bytes 的所有元素。

【讨论】:

    【解决方案2】:

    这里有一些代码可以给你一个提示;它将每个字符作为一个字节,然后使用位掩码遍历最低有效 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;
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      您的代码有 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);
      

      【讨论】:

        猜你喜欢
        • 2012-03-30
        • 2016-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-14
        • 2020-02-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多