我正在使用一些接受二进制文件作为输入的代码。但是,我无法理解代码中的 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++;
}
最佳答案
这种行为最好通过移动位来理解,而不是数字。字节由 8 位组成,整数由 32 位组成。该循环基本上获取数组中的每个字节并将相应的位放入整数 IFD_Address
中。以 8 位 block 为单位,从右(最不重要)到左(最重要),如下所示:
关于按位运算:
-
& 0xff
需要capture the 8 bits into an integer ; -
<<
将位左移以选择IFD_Address
中的适当位置; -
|=
设置IFD_Address
中的位.
参见this tutorial了解详情。
关于java - 不明白这些按位运算符如何对字节和整数进行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56694089/