如何在Java或python中获得endianess?
在如何在Java或python中获得endianess?,java,python,c,endianness,Java,Python,C,Endianness,在C中,我可以通过以下方法检查机器的Endianess。如何使用python或Java程序?。在Java中,char是2字节,不像C中的1字节。我认为使用python可能是不可能的,因为它是一种动态语言,但我可能错了 bool isLittleEndian() { // 16 bit value, represented as 0x0100 on Intel, and 0x0001 else short pattern = 0x0001; //
C
中,我可以通过以下方法检查机器的Endianess
。如何使用python
或Java
程序?。在Java中,char是2字节
,不像C
中的1字节
。我认为使用python
可能是不可能的,因为它是一种动态语言
,但我可能错了
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\u ENDIAN
或LITTLE\u ENDIAN
您可以使用:
或者,您也可以通过内置模块获得endianness:
当然,这都是Python
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");
}
}
}
valter在Java和C中都定义了
short
的(字节)
强制转换,以返回short
的“小”端,而不考虑处理器的端号。而>
被定义为从“大”端转移到“小”端(理论上你不必知道也不必关心这个问题。为什么你想知道endian?不管平台如何,Java总是big endian。@当然,我知道这些信息。但是,编码是可能的。这是一个面试问题。请看这篇帖子:谢谢你的回答。请看这个:;我更熟悉这就是为什么我有兴趣在Java中使用按位操作而不是使用ByteOrder.native.Order()来获得endianess@user1988876-页面顶部的例程是C代码,它使用short
和char
的别名来做它的脏活。正如我所说,在Java.Thx中没有办法做这样的别名来指出我帖子中的错误…删除它,因为我讨厌糟糕的信息,在我的帖子中显然是不正确的。但是你只需要知道如果您处理的是在机器级数据缓冲区等上运行的“奇数”接口(如nio)。
import struct
def is_little():
packed = struct.pack("i", 1)
return packed[0] == "\x01";
print is_little()
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");
}
}
}