我们可以从十六进制值读取第4个字节吗?

时间:2014-12-31 06:43:47

标签: java byte bit-manipulation hex

实际上我并不是那么清楚,所以我在这里提出一个问题,而且我也是新的计算方法。我的情况是这样的,我从CAN(硬件设备)得到一些十六进制值,对于一个特定值,我必须读取第4个字节,在第4个字节中,第5个和第6个字的值决定输出为写的,我的意思是5&第6位是00 =关闭,01 =开启就像这样。所以我的问题是,我们如何从十六进制读取第4个或任何特定字节以及字节特定位。如果可能的话,请给我一些指导或示例或任何教程网站。我google了很多但没有用。请帮帮我。我希望这可以在java中完成。

2 个答案:

答案 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了解详情。