如何在Java或python中获得字节序?

时间:2014-01-24 19:54:07

标签: java python c endianness

C中,我可以通过以下方法获取机器的Endianess。我如何使用pythonJava计划?在Java中,char 2-bytesC不同,1-bytepython。我认为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}}

4 个答案:

答案 0 :(得分:7)

在Java中,它只是

ByteOrder.nativeOrder();

...返回BIG_ENDIANLITTLE_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");
        }
    }
}

瓦尔特