我有一个赋值,我必须将十六进制转换为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;
我要评估的两个十六进制是FFF7
和0001
。我已成功将它们转换为二进制字符串。另外我不知道为什么但前面的零没有出现,只是空格:/
我在网上看了好几个小时,似乎无法找到我遇到的问题。
答案 0 :(得分:1)
我认为您应该查看Integer.parseInt()以将十六进制字符串转换为整数。一旦你有了数字表示,你的二进制操作就会容易得多。
如果您确实需要字符串二进制表示,请查看Integer.toBinaryString()
答案 1 :(得分:1)
我假设您想要将两个16位,大端,十六进制数字按位并在一起,并将结果显示为二进制。
正如其他人所说,使用数字而不是字符串会让你的生活更轻松 - 除非这是作业的约束?
如果我按照我的假设完成这项任务,并且据我了解,我会:
0x8000
到{并包括0x0001
:
&
相应的位StringBuilder
StringBuilder
要逐步浏览每个数字的相应位,我会使用bit masking和bit shifting。
N.B。 0x8000
是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
我希望这在某种程度上有所帮助,而且我的假设并没有太远。祝你好运!