【问题标题】:Python 3 equivalent of Python 2 str.decode('hex') [duplicate]Python 3 相当于 Python 2 str.decode('hex') [重复]
【发布时间】:2018-11-20 01:05:47
【问题描述】:

我正在尝试将 IEEE 754 十六进制浮点数转换为标准 python 浮点数。

以下适用于 Python 2.x:

foo ='4074145c00000005'
conv_pound = struct.unpack('!d', foo.decode('hex'))[0]
print(conv_pound)

并产生以下输出(这确实是我想要的数字):

321.272460938

但是,python 3 没有 str.decode 方法,我正在努力寻找如何做到这一点。有什么建议吗?

【问题讨论】:

  • 我已经尝试过了,但除非我遗漏了什么,否则我会得到 @t\x14\\\x00\x00\x00\x05' 作为结果
  • 绝对不是重复,因为“重复”中显示的方法将给出一个字符串而不是字节对象。在这种情况下,正如下面的答案所示,我们必须中途停下来。
  • @kriss 好吧,OP 已经有了另一半,他们只需要将 2 和 2 放在一起。绝对是骗子。
  • @Wim:绝对不是一个骗子,就像在 python 中假装 bytes 类型是 str 类型的副本。大肆破坏!当然有些人可以自己得到答案,不需要SO。

标签: python python-3.x python-2.7 decode


【解决方案1】:

bytes.fromhex() 在 python3 中为我工作:

Python 3.6.6 (default, Sep 12 2018, 18:26:19) 
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> foo ='4074145c00000005'
>>> import struct
>>> struct.unpack('!d', bytes.fromhex(foo))
(321.2724609375003,)
>>> struct.unpack('!d', bytes.fromhex(foo))[0]
321.2724609375003

【讨论】:

  • 非常感谢,我有碎片,但我很难把它们放在一起
  • @user3352975 不客气!
  • 但不适用于所有十六进制字符串。例如,bytes.fromhex('82').decode('utf-8') 引发 UnicodeDecodeError。使用 'ascii' 格式并不能解决问题,因为对于值 >127 的字节,这将失败。
猜你喜欢
  • 1970-01-01
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
  • 2013-09-22
  • 2017-06-25
  • 1970-01-01
  • 1970-01-01
  • 2019-04-27
相关资源
最近更新 更多