我讨厌自己提出这个问题,但我找不到任何解决方案。
(byte) ((localIntBuffer[srcIdx + col] >> 8) & 0xFF)
这段代码用Java编写,我想在Delphi中学习equals,这段代码是什么意思?
答案 0 :(得分:6)
>>
运算符已右移。&
运算符是按位和。(byte)
是byte
的演员。[]
是数组索引运算符。在Delphi中,这将是这样写的:
(localIntBuffer[srcIdx + col] shr 8) and $ff
不需要在Delphi中进行强制转换,因为所有整数类型都是赋值兼容的,and $ff
确保值在正确的范围内。
有符号移位和无符号移位之间的区别在这里并不重要,因为您要从32位有符号整数中选取8-15位。好吧,我认为localIntBuffer
是int
的数组。如果你这么说,那会更好,而不是让我们猜测。认为只有代码就足够了,这是一个非常普遍的新手错误。对类型的了解也是至关重要的。
正如@TLama正确指出的那样,查阅文档是值得的:
另一种写这种方法的方法是使用LongRec
中的SysUtils
来挑选所需的字节:
LongRec(localIntBuffer[srcIdx + col]).Bytes[1]