【问题标题】:Can we read 4th byte from hexadecimal value?我们可以从十六进制值中读取第 4 个字节吗?
【发布时间】:2014-12-31 06:43:47
【问题描述】:

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

【问题讨论】:

  • 输入数据类型是什么?
  • 你能举几个例子说明进来的价值吗?
  • @JigarJoshi 输入数据类型为十六进制
  • 但是在什么 java 数据类型中? (String ? int ? 究竟是什么)
  • 和示例输入和输出? (只是为了确保)

标签: java byte bit-manipulation hex


【解决方案1】:

假设值为 32 位。

for example assume the input is 0x4FAEBCDB

我假设您要提取 4 字节,即 DB。

对 0x000000FF 进行 AND 运算将只提取第 4 个字节。

That is 
0x4FAEBCDB & 0x000000FF = 0xDB

同样,您可以通过将该字节与特定位作为一个来提取每个单独的位。

for 5th bit 
   0xDB & (1<<5)
for 6th bit
   0xDB & (1<<6)

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

 0x4FAEBCDB & (0xFF000000)

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

 Similarly (1<<5) generates 00010000.

因此对 this 进行 And 操作将返回特定位置的位值。

【讨论】:

  • 嗯,你的意思是(1&lt;&lt;5)
  • 谢谢,小疑问,在这里我们怎么能说 DB 是第 4 个字节,并且要获得第 4 个字节你做了 AND 与 0x000000FF ,如何知道该值,如果我想要的值第 5 或第 6 个字节。
  • 我编辑了我的答案。希望它能澄清你的问题。
  • @rakeshbs 谢谢,非常感谢,这就是我想要的。
  • 如果这能解决问题,请标记答案正确。
【解决方案2】:

为此,您需要使用 & 运算符。

例如,如果你的值在变量 int x 中,

(x & 0xFF000000) >> 24

将提供第 4 个字节。在此,如果您只想选择第 5 位和第 6 位,您可以使用

(x & 0x30000000) >> 28

查看链接http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html了解更多详情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 2012-09-29
    • 2014-02-25
    • 2015-05-22
    相关资源
    最近更新 更多