Java (byte) ((localIntBuffer[srcIdx + col] >> 8) & 0xFF)

Java (byte) ((localIntBuffer[srcIdx + col] >> 8) & 0xFF)

我讨厌自己问这个问题,但我找不到任何解决办法。

(byte) ((localIntBuffer[srcIdx + col] >> 8) & 0xFF)

这段代码是用Java写的,我想学习Delphi中的equals,这段代码是什么意思?

  • >> 运算符是有符号右移。
  • & 运算符是按位与。
  • (byte) 是对 byte 的转换。
  • []是数组索引运算符。

在Delphi中会这样写:

(localIntBuffer[srcIdx + col] shr 8) and $ff

不需要在 Delphi 中进行强制转换,因为所有整数类型都是赋值兼容的,并且 and $ff 确保值在正确的范围内。

有符号移位和无符号移位之间的区别在这里并不重要,因为您是从 32 位有符号整数中挑选出第 8-15 位。好吧,我假设 localIntBufferint 的数组。最好是你这样说,而不是让我们去猜测。认为代码本身就足够了是一个非常常见的新手错误。类型的知识也总是至关重要的。

正如@TLama 正确指出的那样,查阅文档是值得的:

另一种写法是使用 SysUtils 中的 LongRec 来选择所需的字节:

LongRec(localIntBuffer[srcIdx + col]).Bytes[1]