实际上我并不是那么清楚,所以我在这里提出一个问题,而且我也是新的计算方法。我的情况是这样的,我从CAN
(硬件设备)得到一些十六进制值,对于一个特定值,我必须读取第4个字节,在第4个字节中,第5个和第6个字的值决定输出为写的,我的意思是5&第6位是00 =关闭,01 =开启就像这样。所以我的问题是,我们如何从十六进制读取第4个或任何特定字节以及字节特定位。如果可能的话,请给我一些指导或示例或任何教程网站。我google了很多但没有用。请帮帮我。我希望这可以在java中完成。
答案 0 :(得分:4)
假设该值为32位。
for example assume the input is 0x4FAEBCDB
我假设您要提取4个字节,即DB。
使用0x000000FF执行AND操作将仅提取第4个字节。
That is
0x4FAEBCDB & 0x000000FF = 0xDB
类似地,您可以通过将该字节与特定位进行AND运算来提取每个单独的位。
for 5th bit
0xDB & (1<<5)
for 6th bit
0xDB & (1<<6)
如果你想提取第一个字节(4F),你会做
0x4FAEBCDB & (0xFF000000)
FF代表(1111 1111),其余位为0.因此按位运算AND操作将返回我们指定1s的位置的字节。
Similarly (1<<5) generates 00010000.
因此,使用此操作和操作将返回特定位置的位值。
答案 1 :(得分:0)
你需要使用&amp;这个的运营商。
例如,如果您的值在变量int x,
中(x & 0xFF000000) >> 24
将提供第4个字节。在这种情况下,如果您只想选择第5位和第6位,可以使用
(x & 0x30000000) >> 28
查看链接http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html了解详情。