【问题标题】:Hex to BIN conversion in JavaJava中的十六进制到BIN转换
【发布时间】:2021-02-21 08:51:01
【问题描述】:

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

            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

【问题讨论】:

  • "0x" + y 做十六进制到二进制的转换。你只是得到y 的Unicode 字符的值。使用Integer.parseInt(y, 16)y 解析为十六进制。

标签: java binary hex


【解决方案1】:

首先,布尔值既不是整数也不是字符,这就是为什么你的输出是真假而不是一和零。

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

顺序应该是 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;

【讨论】:

    【解决方案2】:

    我有这样的字符串“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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-08
      • 2012-09-14
      • 1970-01-01
      • 1970-01-01
      • 2020-05-16
      • 2017-05-05
      • 2017-10-06
      相关资源
      最近更新 更多