Java之中如何判断CPU是大端(Big Endian)还是小端(Little Endian)
虽然Java之中的内存分配都Java本身都已经处理好了,不存在Big Endian和Little Endian的区别。
jvm是安装大端来处理的。
但是,在一些特殊的情况下,我们任然需要知道CPU到底是big endian或者little endian。
Java里面可以直接的调用java.nio.ByteOrder类的方法nativeOrder()方法,下面的是我的测试代码:
import java.nio.ByteOrder; public class TestCPU { public static void main(String[] args) { if (ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN) { System.out.println("BIG_ENDIAN"); } else { System.out.println("LITTLE_ENDIAN"); } } }
在Windows Intel上输出的结果是:
LITTLE_ENDIAN
在AIX PPC64上面的输出结果是:
=> java TestCPU
BIG_ENDIAN
===
下面是C语言中的作法:
#include <stdio.h> int main() { union ut{ short s; char c[2]; }u; if(sizeof(short) == 2) { u.s = 0x0102; if(u.c[0] == 1 && u.c[1] == 2) { printf("big enidan.\n"); } else if(u.c[0] == 2 && u.c[1] == 1) { printf("little endian.\n"); } } return 0; }