Java中的十六进制到二进制转换

Java中的十六进制到二进制转换,java,binary,hex,Java,Binary,Hex,我在将十六进制转换为bin时遇到问题,我用“y”替换“C”,在microsoft calculator中,我得到的“1100”与下面代码中的完全相同,当我在microsoft calculator中替换“4”时,我得到的是“0100”,当我在下面代码中输入“4”时,我得到的是“0010”。如何修复此代码并像在microsoft calculator中一样接收正确的值 String string = "0x" + y; byte[

我在将十六进制转换为bin时遇到问题,我用“y”替换“C”,在microsoft calculator中,我得到的“1100”与下面代码中的完全相同,当我在microsoft calculator中替换“4”时,我得到的是“0100”,当我在下面代码中输入“4”时,我得到的是“0010”。如何修复此代码并像在microsoft calculator中一样接收正确的值

            String string = "0x" + y;
            byte[] b = string.getBytes(Charset.forName("UTF-8"));
    
            byte x = b[2];
            //System.out.println("bity1: " + ((x & 0x01) != 0) + " " + ((x & 0x02) != 0) + " " + ((x & 0x04) != 0) + " " + ((x & 0x08) != 0));
    
            int j = (i*4);
            tablica[j] = ((x & 0x01) != 0);
            tablica[j+1] = ((x & 0x02) != 0);
            tablica[j+2] = ((x & 0x04) != 0);
            tablica[j+3] = ((x & 0x08) != 0);
            System.out.println( i + " | " + tablica[j] + " " + tablica[j+1] + " " + tablica[j+2] + " " + tablica[j+3]);

首先,布尔值既不是整数也不是字符,这就是为什么您的输出是TRUE和FALSE,而不是1和0

其次,您要向后打印值——首先是最低有效位。颠倒打印顺序

顺序应该是8,4,2,1个值,而不是1,2,4,8个值

        //System.out.println("bity1: " + ((x & 0x01) != 0) + " " + ((x & 0x02) != 0) + " " + ((x & 0x04) != 0) + " " + ((x & 0x08) != 0));
第三,将0xC或0x4转换为字节会得到字符“C”或“4”的值,而不是十六进制值C或4。所以结果不会转换你认为他们正在转换的东西

很难提出正确的解决方案,因为不清楚您的意图是什么。您可以去掉字符串和“b”数组,只需编写

  int b = 0xC;
我有这样的字符串“2000000000c”,我想解码单个字符并写入位值,比如4=0100;2 = 0010. 我用每个字符替换x(1,x=2;2,x=0…9,x=C) “i”是字符的数目

我简化了代码:

    public static void test(int i, char x, boolean[] tablica){
    int j = (i*4);
    tablica[j] = ((x & 0x08) != 0);
    tablica[j+1] = ((x & 0x04) != 0);
    tablica[j+2] = ((x & 0x02) != 0);
    tablica[j+3] = ((x & 0x01) != 0);
    }
但仍然是“C”字符反转为0011,在十六进制到位转换器为1100时,“0x”+y不进行十六进制到二进制的转换。您只需要获取
y
的Unicode字符的值。使用
Integer.parseInt(y,16)
y
解析为十六进制。
    public static void test(int i, char x, boolean[] tablica){
    int j = (i*4);
    tablica[j] = ((x & 0x08) != 0);
    tablica[j+1] = ((x & 0x04) != 0);
    tablica[j+2] = ((x & 0x02) != 0);
    tablica[j+3] = ((x & 0x01) != 0);
    }