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

Posted

技术标签:

【中文标题】如何在Java或python中获得字节序?【英文标题】:how to get endianess in Java or python? 【发布时间】:2014-01-24 19:54:07 【问题描述】:

C我可以通过以下方法得到机器的Endianess。我将如何使用pythonJava 程序?在 Java 中,char 是 2-bytes,而 C1-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 总是大端的。 @rgettman 当然,我知道这些信息。但是否可以编码。这是一道面试题 查看这篇文章:***.com/questions/2188660/… 【参考方案1】:

在 Java 中,它只是

ByteOrder.nativeOrder();

...返回BIG_ENDIANLITTLE_ENDIAN

http://docs.oracle.com/javase/6/docs/api/java/nio/ByteOrder.html

【讨论】:

但你只需要在处理操作机器级数据缓冲区等的“奇数”接口(例如 nio)时才需要知道这一点。【参考方案2】:

short(byte) 转换在 Java 和 C 中都定义为返回 short 的“小”端,无论处理器的字节顺序如何。并且>> 被定义为从“大”端转移到“小”端(<< 则相反),无论处理器的字节顺序如何。同样,+-*/ 等都被定义为独立于处理器字节序。

因此,Java 或 C 中的任何操作序列都不会检测字节序。需要的是某种大小值在另一个之上的某种“别名”(例如获取int 的地址并转换为char*),但Java 没有任何方法可以做到这一点。

【讨论】:

感谢您的回答。请看这个:bits.stephan-brumme.com/endianess.html;我比 C 更熟悉 Java。这就是为什么我有兴趣使用按位运算而不是使用 ByteOrder.native.Order() 在 Java 中获得字节顺序 @user1988876 - 该页面顶部的例程是 C 代码,它使用 shortchar 的别名来完成它的脏活。正如我所说,在 Java 中没有办法做这样的别名。 感谢您指出我帖子中的错误...删除它,因为我讨厌不良信息,并且在我的帖子中显然不正确。【参考方案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");
        
    

变态

【讨论】:

【参考方案4】:

你可以使用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。

【讨论】:

以上是关于如何在Java或python中获得字节序?的主要内容,如果未能解决你的问题,请参考以下文章

python通过ntohl和htonl等函数实现主机字节序和网络字节序相互转换

Go语言中的字节序

字节序的理解----C语言和Python语言

主机字节序 与 网络字节序

大端字节序和小端字节序

网络字节序