我正在阅读一个库 (github.com/adduc/phpmodbus),其中有一个函数用于将整数转换为小端或大端的字节串:
private static function endianness($value, $endianness = 0) {
if ($endianness == 0)
return
self::iecBYTE(($value >> 8) & 0x000000FF) .
self::iecBYTE(($value & 0x000000FF)) .
self::iecBYTE(($value >> 24) & 0x000000FF) .
self::iecBYTE(($value >> 16) & 0x000000FF);
else
return
self::iecBYTE(($value >> 24) & 0x000000FF) .
self::iecBYTE(($value >> 16) & 0x000000FF) .
self::iecBYTE(($value >> 8) & 0x000000FF) .
self::iecBYTE(($value & 0x000000FF));
}
iecBYTE
函数就是chr($value & 0xFF)
。现在我可能有点笨,但字节序看起来不对。
例如,对于
0xAABBCCDD
,你会得到{CC}{DD}{AA}{BB}
。我甚至在维基百科上查过。难道不应该是
{DD}{CC}{BB}{AA}
吗?但这个代码可以工作,这真的让我很困惑。它是正确的,还是我理解错误了?