Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
16位偏移和24位偏移是什么意思?如何使用java进行此类计算_Java_Bit Manipulation - Fatal编程技术网

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

16位偏移和24位偏移是什么意思?如何使用java进行此类计算,java,bit-manipulation,Java,Bit Manipulation,我有一个规范,其中一列指定到结构的16位偏移量,另一列指定到结构的24位偏移量。我正在使用java实现规范。 我不清楚16位偏移/24位偏移意味着什么,以及如何在java中执行这种操作 听起来好像有一段数据被分割成了位序列 位16-23是“16位偏移量” 第24位-?是“24位偏移量” 数据可能是int(32位有符号整数)或long(64位有符号整数),位序列的某些部分分配用于存储单独的较小数据段 获取值的一种方法是使用and和right,如下所示: int mask = 0xf00; //

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

听起来好像有一段数据被分割成了位序列

  • 位16-23是“16位偏移量”
  • 第24位-?是“24位偏移量”
数据可能是
int
(32位有符号整数)或
long
(64位有符号整数),位序列的某些部分分配用于存储单独的较小数据段

获取值的一种方法是使用and和right,如下所示:

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

听起来好像你有一段被分割成位序列的数据

  • 位16-23是“16位偏移量”
  • 第24位-?是“24位偏移量”
数据可能是
int
(32位有符号整数)或
long
(64位有符号整数),位序列的某些部分分配用于存储单独的较小数据段

获取值的一种方法是使用and和right,如下所示:

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

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

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

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

具体地址取决于规范:可能是字节,也可能是“条目”或其他任何内容


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

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

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

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

具体地址取决于规范:可能是字节,也可能是“条目”或其他任何内容


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

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

如何访问它取决于您如何访问结构


如果只是读入字节数组中的内容,则可以通过忽略数组的前两个元素(2字节=8位*2)或3表示24位来访问偏移量为16位的存储数据。如果是long或int,则取决于是否可以使用
>
,这可能意味着数据的边界开始于该结构开始后的16位或24位

如何访问它取决于您如何访问结构

如果只是读入字节数组中的内容,则可以通过忽略数组的前两个元素(2字节=8位*2)或3表示24位来访问偏移量为16位的存储数据。如果是long或int,则取决于您是否可以使用
>