【问题标题】:Python, struct.pack_into: How to change the padding bytes from 00 to FF?Python,struct.pack_into:如何将填充字节从 00 更改为 FF?
【发布时间】:2013-06-16 01:51:29
【问题描述】:

我正在编写 Python 3.3.2 脚本。这是我的代码中的一个 sn-p:

...
text = filename.readlines()
self.metadata = bytearray(256)
...
struct.pack_into('32s', self.metadata, 4, text[0])
...

为 text[0] 的内容保留了 32 个字节。但是,字符串短于 32 个字节,因此未使用的字节用空字节 (0x00) 填充,另请参见 notes。我想将填充更改为 0xFF。除了获取字符串的实际大小,将其打包到我的 bytearray 中,然后将剩余的字节作为 0xFF 打包到 bytearray 中之外,还有什么好方法吗?

【问题讨论】:

    标签: python python-3.x struct


    【解决方案1】:

    如何使用 ljust 方法首先用所需的 0xff 字符将字符串填充到 32 个字节? ljust(width[, fillchar]) 其中width是填充后的字符串总长度,fillchar是要填充的字符(默认为空格)

    struct.pack_into('32s', self.metadata, 4, text[0].ljust(32, b'\xff'))
    

    【讨论】:

    • 这看起来很有希望,谢谢!但是,有一个问题:我以二进制模式打开文件以解决一些编码问题(因此 text[i] 是一个字节数组),并且我想从字符串中删除字符 \r 和 \n。所以我的完整行如下:struct.pack_into('32s', self.metadata, 4, bytes(str(text[0], 'utf-8').strip('\r\n'), encoding='utf-8'))。添加 ljust 调用导致错误struct.pack_into('32s', self.metadata, 4, bytes(str(text[0], 'utf-8').strip('\r\n').ljust(32, b'\xff'), encoding='utf-8')) TypeError: The fill character cannot be converted to Unicode
    • 是的,如果您要编码为 utf-8,您必须在编码步骤之后添加填充字符,否则您也会将 '\xff' 编码为 utf-8(这看起来像unicode 中的无效字符?)所以 ljust 方法在这里对你没有帮助。
    【解决方案2】:

    首先用0xFF初始化字节数组

    metadata = bytearray(b'\xFF'*256)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-30
      相关资源
      最近更新 更多