haraldK 是完全正确的。当一个整数通过网络写出时(或者从技术上讲,当它被串行写入时),字节以相反的顺序被接收。使用 netty 通道缓冲区(和 groovy)这个脚本使它更容易发生什么。它以int 5 开始并写入 LITTLE_ENDIAN 缓冲区。然后将该缓冲区的内容复制到 BIG_ENDIAN 缓冲区中,当读回时,present 和int which os not 5. int 的底层字节已被反转。该脚本还打印 int 的二进制(位)表示,并使用更有效的转换Integer.reverseBytes(int)执行相同的操作。
import org.jboss.netty.buffer.*;
import java.nio.*;
lBuff = ChannelBuffers.buffer(ByteOrder.LITTLE_ENDIAN, 4);
int a = 5;
lBuff.writeInt(a);
bBuff = ChannelBuffers.buffer(ByteOrder.BIG_ENDIAN, 4);
bBuff.writeBytes(lBuff);
int b = bBuff.readInt();
binString = Integer.toBinaryString(b);
println "Int: $b ($binString), Reversed: ${Integer.reverseBytes(b)}";
lBuff.clear(); bBuff.clear();
lBuff.writeInt(b);
bBuff.writeBytes(lBuff);
b = bBuff.readInt();
println "Int: $b (${Integer.toBinaryString(b)}), Reversed: ${Integer.reverseBytes(b)}";
输出如下:
Int: 83886080 (101000000000000000000000000), Reversed: 5
Int: 5 (101), Reversed: 83886080
我对 actionscript-3 了解不多,但此链接概述了如何在 JavaScript 中交换值的字节顺序:
function swap32(val) {
return ((val & 0xFF) << 24)
| ((val & 0xFF00) << 8)
| ((val >> 8) & 0xFF00)
| ((val >> 24) & 0xFF);
}
输出:
> swap32(5)
> 83886080
> swap32(83886080)
> 5