【问题标题】:write a function that determines whether a computer is big endian or little endian in java [duplicate]在java中编写一个确定计算机是大端还是小端的函数[重复]
【发布时间】:2014-02-22 05:26:30
【问题描述】:

我已经重新编写了这段 C 格式的代码,但我不明白具体的过程是什么。任何人都可以用java为我解释一下,或者如果java中有更好的方法,你可以在这里写吗?谢谢你

bool endianess(){
 int testNum;
 char *ptr;

 testNum=1;
 ptr=(char*) &testNum;
 return (*ptr); //* return the byte at the lowest address
}

【问题讨论】:

  • 这是一个难题。 JVM 始终是大端,因此您需要调用本机代码来确定主机端的字节序(如果这是您所要求的)。
  • 简短回答:除了查询系统属性或使用内存映射缓冲区做奇怪的事情之外,您不能这样做。
  • 那么,这里使用字符有什么意义呢?
  • @faranak777 Java 不是 C。
  • 我知道,我的意思是在上面的代码中。

标签: java endianness


【解决方案1】:

您可以使用 System.getProperty("sun.cpu.endian")。或者,您可以使用 SIGAR (https://github.com/hyperic/sigar)、Java 本机访问、JNI 等来获取此信息。

【讨论】:

    【解决方案2】:

    在 Little Endian 架构中,整数值 0x1 会像

    一样写入内存中
    0x1 0x0 0x0 ....
    

    所以该函数将返回 1

    相反,在大端架构中,字节顺序将是

    0x0 0x0 ... 0x1
    

    无论多少字节在一个 int 中(大于或等于 2 才能工作),所以

    此函数将返回 0。

    这里是 can't be done in Java directly 原因的参考,但您可以使用 JNI 转义到 C 库并返回结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-22
      • 2010-09-26
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-04
      • 2016-12-19
      相关资源
      最近更新 更多