如何判断ctypes整数类型是否为big endian?

时间:2018-02-06 19:06:15

标签: python ctypes

请考虑以下事项:

le = ctypes.c_uint32.__ctype_le__
be = ctypes.c_uint16.__ctype_be__

如何编写一个行为符合您期望的函数is_bigendian(cls)

>>> is_bigendian(le)
False
>>> is_bigendian(be)
True

ctypes是否会在某处公开此信息?

1 个答案:

答案 0 :(得分:1)

似乎唯一可行的方法是:

if ctypes.c_uint8.__ctype_be__.__name__.endswith('_be'):
    def is_bigendian(cls):
        return cls.__name__.endswith('_be')
elif ctypes.c_uint8.__ctype_le__.__name__.endswith('_le'):
    def is_bigendian(cls):
        return not cls.__name__.endswith('_le')
else:
    raise RuntimeError

很难发现,因为repr(ctypes.c_uint8.__ctype_be__)没有正确显示班级名称。