如何在Java或python中获得endianess?
在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; }
在Java中,它只是
ByteOrder.nativeOrder();
…返回BIG_ENDIAN
或LITTLE_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。