如何在Java或python中获得endianess?

C我可以通过以下方法获得机器的Endianess 。 我如何使用pythonJava程序? 在Java中,char是2-bytesC不同,它是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; } 

在Java中,它只是

 ByteOrder.nativeOrder(); 

…返回BIG_ENDIANLITTLE_ENDIAN

http://docs.oracle.com/javase/6/docs/api/java/nio/ByteOrder.html

短语的(byte)在Java和C中定义,以返回short的“小”端,而不管处理器的字节顺序如何。 并且>>被定义为从“大”端转换到“小”端(和<<相反”),而不管处理器的字节顺序。 同样地, +-*/等等都被定义为独立于处理器字节序。

因此,Java或C中的任何操作序列都不会检测字节序。 需要的是某种大小值的某种“别名”(例如获取int的地址并转换为char* ),但Java没有任何方法可以做到这一点。

 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"); } } } 

瓦尔特

你可以使用sys.byteorder :

 >>> import sys >>> print sys.byteorder 'little' 

或者您可以通过内置结构模块的一些帮助自己获得字节序:

 import struct def is_little(): packed = struct.pack("i", 1) return packed[0] == "\x01"; print is_little() 

那当然是Python。