Python3编辑十六进制字符串

时间:2015-01-28 20:04:48

标签: python python-3.x

我正在尝试在另一个文件的标题中写入文件的十六进制大小。当我将长度转换为十六进制时,我得到b'\x00\x00\x00\x04',因此它将"00000004"写入文件。

文件的长度以2个字节的间隔存储,所以我需要它将字符串格式化为此b'\x00\x04'。最简单的方法是什么?

import mmap
def compact_bytes(values):
    return (values[0] << 4)| values[2]

我试过这个,但我知道这不正确,不是正确的方法。

3 个答案:

答案 0 :(得分:2)

您正在将数字转换为字节,而不是十六进制。使用struct module执行此操作:

struct.pack('>H', values)

这产生一个无符号短,2个字节,以大端顺序;对于生成4的长度\x00\x04

>>> import struct
>>> struct.pack('>H', 4)
b'\x00\x04'

答案 1 :(得分:2)

假设整数是一个大端无符号短整数,请使用带有大端标记的struct.pack

struct.pack('>H', values)

在此格式字符串中,>是大端标志,而H是无符号短字。

实施例

>>> import struct
>>> struct.pack('>H', 4)
b'\x00\x04'

您可以找到所有struct格式字符here

答案 2 :(得分:0)

>>> 4 .to_bytes(2, 'big')
b'\x00\x04'