我有一个读取列的规范指定结构的16位偏移量,另一列指定结构的24位偏移量。我正在使用java实现规范。 我不清楚16位偏移/ 24位偏移意味着什么以及如何在java中执行此类操作。
答案 0 :(得分:3)
听起来你有一段数据被分割成比特序列。
数据可能是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,则取决于您是否可以使用>>
和<<
移位运算符。