【问题标题】:How to decode raw binary to hex如何将原始二进制解码为十六进制
【发布时间】:2015-02-14 12:39:55
【问题描述】:

我需要将看起来像 b'\xa3\x13\xa4;\xcb\xda\x1b\x1b,Ut\xde\xeb2\xb5\x84\xe5&\x85;' 的原始二进制值解码为看起来像 0x90D152B5ED57E00336FD8E106A7BCE28FC3EA588 的十六进制值。

我尝试使用 raw_bin.decode("hex"),但这告诉我使用 codecs.decode(),但我迷路了..

如何在 python 中将b'\xa3\x13\xa4;\xcb\xda\x1b\x1b,Ut\xde\xeb2\xb5\x84\xe5&\x85;' 解码为0x90D152B5ED57E00336FD8E106A7BCE28FC3EA588

【问题讨论】:

  • import binascii; binascii.hexlify(b'\xa3\x13\xa4;\xcb\xda\x1b\x1b,Ut\xde\xeb2\xb5\x84\xe5&\x85;').decode() 会给你'a313a43bcbda1b1b2c5574deeb32b584e526853b'
  • 谢谢!这已经更好了,但还没有完全实现。我得到b'4e79c534c4fe926f9a0c7c7d3a7112252bfa5b4d'(这可能不是相同的值)但我需要0x4e79c534c4fe926f9a0c7c7d3a7112252bfa5b4d

标签: python python-3.x encoding decode codec


【解决方案1】:

使用binascii.hexlify

>>> x = b'\xa3\x13\xa4;\xcb\xda\x1b\x1b,Ut\xde\xeb2\xb5\x84\xe5&\x85;'
>>> binascii.hexlify(x).decode()
'a313a43bcbda1b1b2c5574deeb32b584e526853b'

使用int 将其转换为数字,base 参数为 16:

>>> int(binascii.hexlify(x), 16)
931003516565576134942949873523045876335469036859
>>> int(binascii.hexlify(x), 16) == 0xa313a43bcbda1b1b2c5574deeb32b584e526853b
True

【讨论】:

  • 非常感谢,这似乎正是我要找的东西。但是当我使用int(binascii.hexlify(x), 16)SELECT 时,它显示The floating point value '950e5119' is out of the range of computer representation (8 bytes)
  • @DaedalusMythos,我想你错过了base 参数 16。
  • @DaedalusMythos,顺便说一句,SELECT 是什么意思?
  • 我在脚本中使用解码后的值,该值稍后用于从表中获取其他数据。我目前如何使用它。variable = int(binascii.hexlify(row['SHA1']), 16)
  • @DaedalusMythos,我认为是 SQL 的问题,而不是 int(...) 的问题。尝试打印variable:print(variable)。它应该可以工作。
猜你喜欢
  • 2018-09-15
  • 2014-02-13
  • 2012-06-26
  • 2010-10-22
  • 2020-06-15
  • 2021-06-23
  • 1970-01-01
  • 2015-08-03
  • 2013-02-19
相关资源
最近更新 更多