Python 使用16位块将数字表示为字节

Python 使用16位块将数字表示为字节,python,python-3.x,Python,Python 3.x,我希望将类似于683550(0xA6E1E)的数字转换为b'\x1e\x6e\x0a\x00',其中数组中的字节数是2的倍数,其中bytes对象的len仅为表示该数字所需的长度 就我所知: "{0:0{1}x}".format(683550,8) 给予: '000a6e1e' 使用.tobytes-方法: num = 683550 bytes = num.to_bytes((num.bit_length()+15)//16*2, "little") 使用python3: def enco

我希望将类似于
683550
(0xA6E1E)的数字转换为
b'\x1e\x6e\x0a\x00'
,其中数组中的字节数是2的倍数,其中bytes对象的len仅为表示该数字所需的长度

就我所知:

"{0:0{1}x}".format(683550,8)
给予:

'000a6e1e' 

使用
.tobytes
-方法:

num = 683550
bytes = num.to_bytes((num.bit_length()+15)//16*2, "little")
使用python3:

def encode_为_my_hex_格式(num,bytes,group,len=2,byteorder='little'):
"""
@param byteorder可以接受'little'或'big'值
"""
bytes_needed=abs(-len(bin(num)[2:])//8)
如果字节\u需要%bytes\u组\u len:
字节\所需+=字节\组\长度-字节\所需百分比字节\组\长度
num_in_bytes=num.to_字节(需要字节,字节顺序)
编码的字节数=b“”
对于范围内的索引(0,len(num,in,bytes),bytes,group,len):
bytes\u group=num\u in\u bytes[索引:索引+字节\u group\u len]
如果字节顺序=='little':
字节组=字节组[-1:-len(字节组)-1:-1]
编码的字节组中的字节数+=字节组
编码的_num=“”
对于编码字节中的字节\u num\u in\u字节:
编码的_num+=r'\x'+hex(字节)[2:].zfill(2)
返回编码的\u num
打印(编码为我的十六进制格式(683550))

疯狂的字节顺序是怎么回事?这不是big-endian或little-endian。@user2357112对不起。它出错的原因是因为我使用“hextump-x”查看文件中的字节。如果没有-x,则更有意义。为您的答案输出[hex(i)for i in t]将给出['0x1e'、'0x6e'、'0xa'、'0x0']。我在找['0x6e'、'0x1e'、'0x0'、'0xa'],所以你真的想要这个混合的大端词。请看我的最新答案。对不起@Daniel,你原来的答案确实是正确的。我正在使用“hextump-x”来查看文件,该文件正在进行切换。我已经用正确的字节编辑了我的问题。请再次返回,再次返回。您需要输出字节而不是字符串。然后只需在函数中返回编码的\u num而不是编码的\u num。