我正在尝试在另一个文件的标题中写入文件的十六进制大小。当我将长度转换为十六进制时,我得到b'\x00\x00\x00\x04'
,因此它将"00000004"
写入文件。
文件的长度以2个字节的间隔存储,所以我需要它将字符串格式化为此b'\x00\x04'
。最简单的方法是什么?
import mmap
def compact_bytes(values):
return (values[0] << 4)| values[2]
我试过这个,但我知道这不正确,不是正确的方法。
答案 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'