【问题标题】:bytearray in python using hexadecimal valuespython中的bytearray使用十六进制值
【发布时间】:2017-01-12 13:17:39
【问题描述】:

我想在处理字节时使用十六进制值。但是我不太确定这是如何完成的。例如:

>>> bytearray([0x10,0x20,0x30])
bytearray(b'\x10 0')

为什么 0x20 和 0x30 会被忽略?

【问题讨论】:

    标签: python arrays hex byte


    【解决方案1】:

    0x20 和 0x30 不会被忽略:bytearray 的格式类似于 ASCII 字符,0x20 恰好是空格 () 的 ASCII 码,0x30 也是如此映射到零 (0)。

    这只是表示二进制数组的一种简洁方式。您可以在此Wikipedia article 中读取所有值及其对应的字符。

    如果字符不可打印,则将其格式化为\x??,?? 为十六进制代码。

    【讨论】:

      【解决方案2】:

      它们不会被忽略。 0x20 是空格的 ASCII 码点,0x30 是数字 0。两者都在输出中,跟在\x10 字节之后。

      您看到的是字节值的表示,它试图尽可能地可读。它通过将可打印 ASCII 范围内的任何字节显示为该 ASCII 字符来实现。任何无法表示的内容都显示为\xhh 转义序列或较短的两个字符\? 转义(例如\n 用于换行符或\t 用于制表符)。

      请注意,Python 会为每个 0xhh 十六进制表示法生成一个整数值;它只不过是产生相同整数值的替代语法。您也可以使用十进制表示法或八进制表示法,结果是一样的;您将 整数值 放入 list 对象中,然后从中创建 bytearray 对象。在这个过程中,原始的十六进制表示法不保留:

      >>> [0x10, 0x20, 0x30]
      [16, 32, 48]
      >>> bytearray([16, 32, 48])
      bytearray(b'\x10 0')
      >>> [0o20, 0o40, 0o60]
      [16, 32, 48]
      >>> bytearray([0o20, 0o40, 0o60])
      bytearray(b'\x10 0')
      

      bytearray 中的实际值仍然是整数;如果您索引到对象,您将获得单个字节值:

      >>> ba = bytearray([0x10, 0x20, 0x30])
      >>> ba
      bytearray(b'\x10 0')
      >>> ba[1]  # 0x20, the space
      32
      >>> ba[2]  # 0x30, the 0 digit
      48
      

      【讨论】:

      • 您能否告诉我如何将字节数组视为流,例如 x = bytearray([0x10,0x20,0x30]) 和 x.read(1) = 16, x.read (1) = 32
      • @ritch:如果您需要字节流,请改用io.BytesIO()。
      • @ritch: 所以x = io.BytesIO(bytes([0x10, 0x20, 0x30])),然后是x.read(1),等等
      • 我一直在这样做——我先做b = x.read(1),然后再做print b,我就空白了。如何让它存储数值而不是 ascii 表示?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 2018-07-26
      • 2016-12-02
      • 2022-12-22
      • 2016-04-17
      • 1970-01-01
      • 2013-01-18
      相关资源
      最近更新 更多