如何将二进制拆分为4个字节的部分?

时间:2015-11-07 19:38:11

标签: java

我有一个包含不同字符的字符,我想将这些字符的二进制值打印成两个4字节的部分。我在开头添加1,这样每个都是4。

    System.out.println(1 + Integer.toString(mychar[i],2));

我正在使用for循环来浏览不同的字符并创建一个表。通过这样做,我可以得到二进制值加上一个。但我不知道如何将它分成两个4字节。

让我们假设mychar[i]持有String bryan。输出应该如下。

 b    1110 0010
 r    1111 0010
 y    1111 1001
 a    1110 0001
 n    1110 1110 

4 个答案:

答案 0 :(得分:3)

我已经使用this answer来找到解决方案:

private static String toBinaryRepresentation(String name) {
    // 11 is size of "0000 0000\r\n
    StringBuilder sb = new StringBuilder(name.length() * 11);
    for (int i = 0; i < name.length(); i++) {
        String binRep = toBinaryRepresentation(name.charAt(i));
        sb.append(String.format("%s%n", binRep));
    }
    return sb.toString();
}

private static String toBinaryRepresentation(char c) {
    if (c > 0xFF) {
        throw new IllegalArgumentException("Character value too high to print");
    }
    int highNibble = (c >> 4) & 0xF;
    String highBinaryDigits = String.format("%4s", Integer.toBinaryString(highNibble)).replace(' ', '0');
    int lowNibble = c & 0xF;
    String lowBinaryDigits = String.format("%4s", Integer.toBinaryString(lowNibble)).replace(' ', '0');
    return String.format("%s %s", highBinaryDigits, lowBinaryDigits);
}

您可以通过调用此函数来使用:

String name = "brian";
System.out.print(toBinaryRepresentation(name));

打印:

0110 0010
0111 0010
0110 1001
0110 0001
0110 1110

因此,首先将高半字节和低半字节分开,然后使用精确的4位打印该值,即使它们为零。

答案 1 :(得分:3)

转换为二进制文件时,我个人最喜欢零填充(即字节,短字等):

String binaryRep = Integer.toBinaryString( 0x100 | mychar[i] & 0xff ).substring(1);
  • &确保mychar[i]
  • 不超过8位
  • 0x100 |部分设置第9位。这意味着最右边8位的所有零都将在结果中表示,结果恰好是9个字符。
  • 然后从1中取出子串确保我们只取8。

当然,上面假设一个符合8位的字符。如果您尝试中文或阿拉伯字符,它基本上只会给你最右边的8位。

无论您使用哪种方法生成8个零填充位,您都需要在中间添加空格。对于我上面的方法,我们可以进行修改:

public static String eightBitCharToBinary( char c ) {

    String charAsNineBits = Integer.toBinaryString( 0x100 | c & 0xff );
    return charAsNineBits.substring(1,5) + " " + charAsNineBits.substring(5,9);

}

与上面的相同,但不是仅仅取一个子串,而是取两个子串并在中间放置一个空格。

答案 2 :(得分:1)

<!DOCTYPE html>
<html>
  <head>
    <style type="text/css">
      td { width:30px; height: 30px; text-align: center; }
    </style>
  </head>
  <body>
    <table border=1>
      <tr>
        <td colspan=2>12</td>
        <td>3</td>
      </tr>
      <tr>
        <td>4</td>
        <td colspan=2 rowspan=2>56<br/>89</td>
      </tr>
      <tr>
        <td>7</td>
      </tr>
      <tr>
        <td>A</td>
        <td>B</td>
        <td>C</td>
      </tr>
    </table>
  </body>
</html>

答案 3 :(得分:1)

char c = 'b';
        String binaryString =Integer.toBinaryString(c);
        System.out.println("1" + binaryString.substring(0, 3) + "  " + binaryString.substring(3));