我正在处理一些将二进制文件作为输入的代码。但是,我在理解代码中的for循环时遇到了麻烦,因为我不了解按位运算符对IFD_Address
所做的操作,例如|=
,<<
和& 0xff
。我认为IFD_Address
指向二进制文件中的指针,但是我不确定。这段代码试图实现什么?
byte[] IFD_Address_tmp = Arrays.copyOfRange(bytes, 4, 8);
int IFD_Address = 0;
int i = 0;
int shiftBy = 0;
for (shiftBy = 0; shiftBy < 32; shiftBy += 8) {
IFD_Address |= ((long) (IFD_Address_tmp[i] & 0xff)) << shiftBy;
i++;
}
最佳答案
最好通过移动位而不是数字来了解此行为。字节包括八位,整数,32位。循环基本上会占用数组中的每个字节,并将相应的位放在整数IFD_Address
中,分为8位,从右(最低有效)到左(最高有效),如下所示:
关于按位运算:
capture the 8 bits into an integer需要& 0xff
;<<
将位左移以选择IFD_Address
中的适当位置;|=
设置IFD_Address
中的位。
有关详细信息,请参见this tutorial。
关于java - 不了解这些按位运算符如何对字节和整数进行操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56694089/