0

我有一个任务,我必须将十六进制转换为 16 位二进制字符串,然后使用按位运算符比较其中两个。我有一个 for 循环,它执行a.charAt[i]&b.charAt[i]到一个字符串生成器字符串。现在,我希望它输出一个二进制数,但我已经达到了每次执行该行时,它给我的数字不是 0 或 1。它给了我 2 个数字(2 和 3)。我究竟做错了什么?

一些代码:

    int bin = 0;
    hex = hex.replaceFirst("0x", "");
    bin = Integer.parseInt(hex, 16);
    hex = String.format("%16s", Integer.toBinaryString(bin));
    return hex;

我要评估的两个十六进制数是FFF70001。我已经成功地将它们转换为二进制字符串。我也不知道为什么,但前面的零没有出现,只是空格:/

我已经在网上广泛搜索了几个小时,但似乎找不到我遇到的问题。

4

2 回答 2

1

我认为您应该查看Integer.parseInt()将十六进制字符串转换为整数。一旦你有了一个数字表示,那么你的二进制操作就会容易得多。

如果您确实需要字符串二进制表示,请查看Integer.toBinaryString()

于 2012-10-04T10:43:56.580 回答
1

我假设您想将两个 16 位、大端、十六进制数按位与在一起,并将结果显示为二进制。

正如其他人所说,使用数字而不是字符串会让你的生活更轻松 - 除非这是分配的约束?

如果我在做这项任务,根据我的假设和我的理解,我会:

  • 将字符串转换为数字
  • 对于数字的每一位,从0x8000下到包括0x0001
    • &对应的位
    • 将结果附加到StringBuilder
  • 返回的内容StringBuilder

要逐步遍历每个数字的相应位,我将使用bit maskingbit shift

NB0x8000是 16 位数字的最高位。

另一种方法是让 Java 做很多事情,但这可能不是您分配的重点:

final int a = Integer.parseInt("FFF7", 16); // 0b1111111111110111
final int b = Integer.parseInt("0001", 16); // 0b0000000000000001

final int result = a & b;

final String output = String.format("%16s", 
    Integer.toBinaryString(result)).replace(' ', '0');

System.out.println(output); 

这将打印:

0000000000000001

我希望这在某种程度上有所帮助,并且我的假设并不太离谱。祝你好运!

于 2012-10-04T15:10:37.690 回答