【问题标题】:Python write string of bytes to filePython将字节字符串写入文件
【发布时间】:2013-06-27 17:46:55
【问题描述】:

如何使用 python 以字节模式将一串字节写入文件?

我有:

['0x28', '0x0', '0x0', '0x0']

如何将 0x28、0x0、0x0、0x0 写入文件?我不知道如何将这个字符串转换为有效字节并写入。

【问题讨论】:

    标签: python python-3.x string file byte


    【解决方案1】:

    映射到bytearray()bytes() 对象,然后将其写入文件:

    with open(outputfilename, 'wb') as output:
        output.write(bytearray(int(i, 16) for i in yoursequence))
    

    另一种选择是使用binascii.unhexlify() function 将您的十六进制字符串转换为bytes 值:

    from binascii import unhexlify
    
    with open(outputfilename, 'wb') as output:
        output.write(unhexlify(''.join(format(i[2:], '>02s') for i in b)))
    

    这里我们必须先切掉0x 部分,然后重新格式化该值以用零填充它并将整个连接成一个字符串。

    【讨论】:

      【解决方案2】:

      在 Python 3.X 中,bytes() 会将整数序列转换为字节序列:

      >>> bytes([1,65,2,255])
      b'\x01A\x02\xff'
      

      生成器表达式可用于将您的序列转换为整数(注意int(x,0) 根据其前缀将字符串转换为整数。0x 选择十六进制):

      >>> list(int(x,0) for x in ['0x28','0x0','0x0','0x0'])
      [40, 0, 0, 0]
      

      组合它们:

      >>> bytes(int(x,0) for x in ['0x28','0x0','0x0','0x0'])
      b'(\x00\x00\x00'
      

      然后把它们写出来:

      >>> L = ['0x28','0x0','0x0','0x0']
      >>> with open('out.dat','wb') as f:
      ...  f.write(bytes(int(x,0) for x in L))
      ...
      4
      

      【讨论】:

        猜你喜欢
        • 2013-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-30
        • 1970-01-01
        • 2014-03-07
        • 1970-01-01
        • 2019-09-04
        相关资源
        最近更新 更多