haraldK是正确的。当一个整数在网络上写出来(或者从技术上讲,当它被串行写入时),字节以相反的顺序被接收。使用netty通道缓冲区(和常规)这个脚本使得它更容易发生什么。它以5的int开始并写入LITTLE_ENDIAN缓冲区。然后将该缓冲区的内容复制到一个BIG_ENDIAN缓冲区中,并在读出时返回,并且其中的内存不是5.该int的基本字节已被颠倒过来。该脚本还打印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
我不知道动作-3多,但这个link概述了如何交换的值的字节序在JavaScript:
function swap32(val) {
return ((val & 0xFF) << 24)
| ((val & 0xFF00) << 8)
| ((val >> 8) & 0xFF00)
| ((val >> 24) & 0xFF);
}
输出:
> swap32(5)
> 83886080
> swap32(83886080)
> 5
给我们一个例子,说明你写的和你读过的东西。 –
Endianness在这种情况下当然可以发挥作用。如果打印读取/写入的值为十六进制值,则应该很容易看到该模式是否反转(即:如果字节顺序错误,则0x00112233将为0x33221100)。 – haraldK