【问题标题】:Signed decimal from a signed hex short in pythonpython中带符号的十六进制短符号的带符号十进制
【发布时间】:2018-08-04 21:39:02
【问题描述】:

我想知道是否有任何简单快捷的方法可以在 python 中获取带符号的十六进制的十进制值。

我检查十六进制代码的值只是在终端中打开 python 并输入十六进制,它会返回如下十进制:

>>>0x0024
36
>>>0xcafe
51966

所以我想知道,有没有什么办法可以为带符号的短十六进制做到这一点?例如 0xfffc 应该返回 -4

【问题讨论】:

    标签: python binary hex signed


    【解决方案1】:
    import ctypes
    
    def hex2dec(v):
        return ctypes.c_int16(v).value
    
    print hex2dec(0xfffc)
    print hex2dec(0x0024)
    print hex2dec(0xcafe)
    

    【讨论】:

      【解决方案2】:

      您可以使用int 类方法from_bytes 并为其提供字节:

      >>> int.from_bytes(b'\xfc\xff', signed=True, byteorder='little')
      -4
      

      【讨论】:

      • 谢谢,我认为这也很有用,但 dmitri 的回答将以更简单的方式工作,当我尝试获取签名字符的值时,我会记住这一点,非常有用,但有点太长了
      • 这里最好的方法。它不仅使用内置函数,而且还接受来自字节字符串的输入。
      【解决方案3】:

      如果你可以使用 NumPy 数值类型,你可以使用 np.int16 类型转换

      >>> import numpy as np
      >>> np.int16(0x0024)
      36
      >>> np.int16(0xcafe)
      -13570
      >>> np.int16(0xfffc)
      -4
      >>> np.uint16(0xfffc)
      65532
      >>> np.uint16(0xcafe)
      51966
      

      Python 语言指定整数的统一表示,numbers.Integral 类,numbers.Rational 的子类型。在 Python 3 中,对这种类型的范围没有特定的限制。在 Python 2 中,仅指定了最小范围,即numbers.Integral 应至少具有 -2147483648 到 2147483647 的范围,这对应于 32 位表示。

      NumPy 实现更接近机器架构。为了有效地实现数字运算,它提供了fixed width datatypes,例如int8int16int32int64

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-07
        • 1970-01-01
        • 2013-04-15
        • 2012-04-08
        相关资源
        最近更新 更多