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

Rag*_*ghu 2 java hex byte bit-manipulation

其实我不是很清楚,所以我在这里提出了一个问题,我也是位计算的新手。我的场景是这样的,我从CAN(A hardware device)获得一些十六进制值,对于一个特定的值,我必须读取第 4 个字节,在第 4 个字节中,第 5 位和第 6 位的值决定要写入的输出,我的意思是如果第 5 和第 6 位是 00= off , 01= on 像这样。所以我的问题是,我们如何从十六进制中读取第 4 个或任何特定字节以及字节中的特定位。如果可能,请给我一些指导或示例或任何教程站点。我用谷歌搜索了很多但没有用。请帮助我。我希望这在java中完成。

rak*_*hbs 5

假设该值为 32 位。

for example assume the input is 0x4FAEBCDB
Run Code Online (Sandbox Code Playgroud)

我假设您要提取 DB 的 4 个字节。

使用 0x000000FF 进行 AND 运算将仅提取第 4 个字节。

That is 
0x4FAEBCDB & 0x000000FF = 0xDB
Run Code Online (Sandbox Code Playgroud)

类似地,您可以通过将此字节与特定位作为 1 进行 AND 运算来提取每个单独的位。

for 5th bit 
   0xDB & (1<<5)
for 6th bit
   0xDB & (1<<6)
Run Code Online (Sandbox Code Playgroud)

如果你想提取第一个字节(4F),你会这样做

 0x4FAEBCDB & (0xFF000000)
Run Code Online (Sandbox Code Playgroud)

FF 代表 (1111 1111),其余位为 0。因此按位执行 AND 运算将返回我们指定 1 位置处的字节。

 Similarly (1<<5) generates 00010000.
Run Code Online (Sandbox Code Playgroud)

因此,使用此进行与操作将返回特定位置的位值。