【问题标题】:convert str 'A123456' to bytes b'\x0A\x12\x34\x56' in python在 python 中将 str 'A123456' 转换为字节 b'\x0A\x12\x34\x56'
【发布时间】:2018-11-09 02:26:02
【问题描述】:

我使用 python 2.7 和 windows。

我想将字符串'A123456'转换为字节:b'\x0A\x12\x34\x56',然后将它与其他字节(b'\xBB')连接到b'\xbb\x0A\x12\x34 \x56'。

即我想从字符串'A123456'和b'\xBB'中获取b'\xbb\x0A\x12\x34\x56'

【问题讨论】:

  • 你看过答案here吗?
  • Python 2 中的字符串是哑字节。它们不是 unicode 或任何东西,只是愚蠢的字节。
  • @Samantha Miller 我已阅读,但我想将 'A123456' 转换为 b'\x0A\x12\x34\x56'。
  • @Alexander Huszagh 我知道,但我想将 'A123456' 转换为 b'\x0A\x12\x34\x56'。

标签: python python-2.7 hex python-2.x


【解决方案1】:

这对binascii.unhexlify 来说并不太难,唯一的问题是,当它不是偶数个半字节时,你想对字符串进行零填充(unhexlify 不接受长度7 个字符串)。

因此,首先,最好创建一个快速实用的函数来执行此操作,因为高效地执行此操作并不是很明显,并且您需要一个自我记录的名称:

def zeropad_even(s):
    # Adding one, then stripping low bit leaves even values unchanged, and rounds
    # up odd values to next even value
    return s.zfill(len(s) + 1 & ~1)

现在你所要做的就是在 unhexlifying 之前使用它来修复你的字符串:

>>> from binascii import unhexlify
>>> unhexlify(zeropad_even('A123456'))
'\n\x124V'
>>> _ == b'\x0A\x12\x34\x56'
True

我包含最后一个测试只是为了表明您得到了预期的结果; strrepr 尝试在可用的情况下使用可打印的 ASCII 或短转义,因此只有 \x12 实际上以 repr 结尾; \x0A' 变成 \n\x344\x56V,但这些都是拼写相同字节的等效方式。

【讨论】:

  • 很好,修复了转换部分,但是如何将它与其他字节(b'\xBB')连接到b'\xbb\x0A\x12\x34\x56'?
  • @liyuting: b'\xBB' + unhexlify(zeropad_even('A123456'))?这只是简单的串联,一旦转换过程开始,似乎并不困难。
猜你喜欢
  • 1970-01-01
  • 2015-04-16
  • 2019-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-17
  • 2022-11-07
  • 2014-04-03
相关资源
最近更新 更多