嗨我有一个32b值,我需要轻松地截断它的四个字节,将每个字节转换为ASCII并将它们组合成一个四字母字符串。我也需要相反的过程。我已经能够以一种丑陋的方式在一个方向上做到这一点:
## the variable "binword" is a 32 bit value read directly from an MCU, where each byte is an
## ASCII character
char0 = (binword & 0xFF000000) >> 24
char1 = (binword & 0xFF0000) >> 16
char2 = (binword & 0xFF00) >> 8
char3 = (binword & 0xFF)
fourLetterWord = str(unichr(char0))+str(unichr(char1))+str(unichr(char2))+str(unichr(char3))
现在,我发现这种方法非常优雅且耗时,所以问题是如何更好地做到这一点?并且,我想更重要的问题是,我如何转换其他方式?
答案 0 :(得分:1)
您应该使用struct
模块的pack
和unpack
来电转换
number = 32424234
import struct
result = struct.pack("I", number)
并返回:
number = struct.unpack("I", result)[0]
请参阅struct module上关于struct-string语法的官方文档, 和标记,以确保endiannes和数字大小。 https://docs.python.org/2/library/struct.html
旁注 - 这绝不是“ASCII” - 它是一个字节串。 ASCII是指特定的文本编码,其代码在32-127数字范围内。 关键是你不应该把字节串视为文本,如果你需要一个字节流 - 更不用说“ASCII”作为文本字符串的别名 - 因为它可以代表不到1%的文本字符存在于文本字符串中。世界。