【问题标题】:Hex digit to binary with only 4 digits十六进制数字到二进制只有4位
【发布时间】:2013-11-21 14:16:11
【问题描述】:

int[] 字母 = {0x69F99}

我想将每个十六进制数字转换为二进制,例如第一个十六进制字符串 (6) 中的第一个十六进制数字:

String hex = Integer.toHexString(LETTERS[0]);
String binary = Integer.toBinaryString(hex.charAt(0));
System.out.println(binary);

输出:110110

如果我这样做 Integer.toBinaryString(6) 输出将是 110,但我想要 4 位数字,可以吗?

【问题讨论】:

    标签: java binary hex converter


    【解决方案1】:

    我只是用你最喜欢的库或实用程序函数适当地填充字符串。

    使用番石榴:

    String binary = Strings.padStart(Integer.toBinaryString(hex.charAt(0)), 4, '0'));
    

    另一种选择是简单地填充字符缓冲区并将其呈现为字符串,这基本上是 OpenJDK implementation 所做的:

    public static String intToBin(int num) {
        char[] buf = new char[4];
        buf[0] = num & 0x1;
        buf[1] = num & 0x2;
        buf[2] = num & 0x4;
        buf[3] = num & 0x8;
        return new String(buf);
    }
    

    【讨论】:

      【解决方案2】:

      这里没有字符串 - 只是一个带有一个 int 的数组,所以你基本上尝试将此整数转换为半字节,这可以通过这种方式完成:

      int num = 0x12345678;
      
      String bin32 = String.format("%32s", Integer.toBinaryString(num)).replace(" ", "0");
      System.out.printf("all 32bits=[%s]\n", bin32);
      
      for(int nibble = 0; nibble < 32; nibble += 4)
      {
          System.out.printf("nibble[%d]=[%s]\n", nibble, bin32.subSequence(nibble, nibble+4));
      }
      

      给予:

      all 32bits=[00010010001101000101011001111000]
      nibble[0]=[0001] ie hex digit 1 as bin
      nibble[4]=[0010] ie hex digit 2 as bin
      nibble[8]=[0011]
      nibble[12]=[0100]
      nibble[16]=[0101]
      nibble[20]=[0110]
      nibble[24]=[0111]
      nibble[28]=[1000] ie hex digit 8 as bin
      

      【讨论】:

        猜你喜欢
        • 2012-06-04
        • 2016-07-31
        • 2016-07-24
        • 1970-01-01
        • 2018-08-26
        • 2014-10-30
        • 2012-12-12
        • 2017-03-09
        相关资源
        最近更新 更多