繁体   English   中英

Java 中的十六进制到 BIN 转换

[英]Hex to BIN conversion in Java

我在将十六进制转换为 bin 时遇到问题,对于“y”,我替换为“C”,在微软计算器中我收到的“1100”与下面的代码完全相同,当我在微软计算器中替换“4”时我收到“0100”我在下面的代码中输入了“4”,我收到了“0010”。 如何修复此代码并像在微软计算器中一样接收正确的值?

            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]);
decode: 040100010C000000

0 | false false false false
1 | false false true false
2 | false false false false
3 | true false false false
4 | false false false false
5 | false false false false
6 | false false false false
7 | true false false false
8 | false false false false
9 | true true false false
10 | false false false false
11 | false false false false
12 | false false false false
13 | false false false false
14 | false false false false
15 | false false false false

首先,布尔值既不是整数也不是字符,这就是为什么您的输出是 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;

我有这样的字符串“200000000C”,我想解码单个字符并写入位值,例如 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM