【问题标题】:Python hexidecimal byte interconversion oddityPython十六进制字节相互转换奇怪
【发布时间】:2022-01-18 03:08:46
【问题描述】:

我一定是错过了什么......

np.float32(0xc32).tobytes() # --> `b'\x00 CE'`
struct.pack('<f', 0xc32) # --> `b'\x00 CE'`

但以下内容不会转换回来...

np.float32(0xc32).tobytes().hex() # --> '00204345'
struct.pack('<f', 0xc32).hex() # --> '00204345'

有人知道这里的错误吗?

【问题讨论】:

  • 期待的是什么?转换回到什么
  • 错误是使用hex(),它做了一些与你想要的不同的事情。
  • @juanpa.arrivillaga 希望从十六进制字符串0xc32 转换回0xc32
  • 您是否尝试过使用struct.unpack 作为struct.pack 的倒数?
  • 0xc32 不是“十六进制字符串”。它是一个 int 文字,其计算结果是一个常规的 int 对象,事实上,这是使用十六进制符号在源代码中编写的,这并不是 int 对象真正知道的。

标签: python python-3.x hex byte


【解决方案1】:

正如 cmets 中所指出的,我的错误是关于十六进制字符串的假设......进行这种相互转换的正确方法:

np.frombuffer(np.float32(0xc32).tobytes(), dtype=np.float32)
struct.unpack('<f',struct.pack('<f', 0xc32))

【讨论】:

    【解决方案2】:

    那里的问题是因为那是那个值的十六进制字符串。当您将其转换为浮点数时,这就是该浮点值的十六进制表示。

    【讨论】:

      猜你喜欢
      • 2018-04-14
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2013-09-12
      • 1970-01-01
      • 1970-01-01
      • 2017-08-23
      • 2012-01-24
      相关资源
      最近更新 更多