16位偏移和24位偏移是什么意思?我如何使用java进行此类计算

时间:2011-08-17 13:53:27

标签: java bit-manipulation

我有一个读取列的规范指定结构的16位偏移量,另一列指定结构的24位偏移量。我正在使用java实现规范。 我不清楚16位偏移/ 24位偏移意味着什么以及如何在java中执行此类操作。

3 个答案:

答案 0 :(得分:3)

听起来你有一段数据被分割成比特序列。

  • 位16-23是“16位偏移”
  • 比特24-?是“24位偏移”

数据可能是int(32位有符号整数)或long(64位有符号整数),其中位序列的某些部分被分配用于存储单独的较小数据。

简单地获取值的一种方法是使用bit mask和右shift,如下所示:

int mask = 0xf00; // only bits 16-23 are 1
int data;
int value = data & mask; // zero other bits
value >>= 16; // shift the value down to the end

答案 1 :(得分:2)

偏移量是某些流和/或存储介质中的相对地址。

16位偏移是存储在16位变量/插槽中的偏移量。

因此,如果某些文件格式规范说“下一个字段是16位偏移”,则意味着您必须读取下一个2字节并将其视为相对地址。

完全地址取决于规范:它可能是字节,可能是“条目”或其他任何内容。

另请注意,Java没有任何内置的24位数据类型,因此您必须使用具有32位的int解决此问题。

答案 2 :(得分:0)

这可能意味着数据的边界在该结构开始后从16位或24位开始。

如何访问它取决于您开始访问结构的方式。

如果它只是你读入字节数组的东西,可以通过忽略数组的前两个元素(2字节= 8位* 2)或24位的3来访问存储偏移16位的数据。如果它是long或int,则取决于您是否可以使用>><<移位运算符。