在C
中,我可以通过以下方法获取机器的Endianess
。我如何使用python
或Java
计划?在Java中,char 2-bytes
与C
不同,1-byte
。python
。我认为dynamic language
可能不可能,因为它是bool isLittleEndian()
{
// 16 bit value, represented as 0x0100 on Intel, and 0x0001 else
short pattern = 0x0001;
// access first byte, will be 1 on Intel, and 0 else
return *(char*) &pattern == 0x01;
}
,但我可能是错的
{{1}}
答案 0 :(得分:7)
在Java中,它只是
ByteOrder.nativeOrder();
...返回BIG_ENDIAN
或LITTLE_ENDIAN
。
http://docs.oracle.com/javase/6/docs/api/java/nio/ByteOrder.html
答案 1 :(得分:4)
(byte)
的{{1}}强制转换在Java和C中定义,以返回short
的“小”端,无论处理器的字节顺序如何。并且short
被定义为从“大”端转换到“小”端(和>>
相反),而不管处理器的字节顺序如何。同样,<<
,+
,-
,*
等等都被定义为独立于处理器字节顺序。
因此,Java或C中的任何操作序列都不会检测字节序。需要的是某种大小值的某种“别名”(例如取/
的地址并转换为int
),但Java没有任何办法可以做此
答案 2 :(得分:3)
您可以使用sys.byteorder:
>>> import sys
>>> print sys.byteorder
'little'
或者你可以在内置struct模块的帮助下自己获得字节序:
import struct
def is_little():
packed = struct.pack("i", 1)
return packed[0] == "\x01";
print is_little()
当然,这就是Python。
答案 3 :(得分:3)
import java.nio.ByteOrder;
public class Endian {
public static void main(String argv[]) {
ByteOrder b = ByteOrder.nativeOrder();
if (b.equals(ByteOrder.BIG_ENDIAN)) {
System.out.println("Big-endian");
} else {
System.out.println("Little-endian");
}
}
}
瓦尔特