【发布时间】:2021-06-13 12:17:25
【问题描述】:
我想将一些字节放入一个字符串中。
所以我有我的字符串,我想预先添加 2 个字节(给定数字的十六进制值)
given_num = 231
bytes_num = given_num.to_bytes(2,'big')
my_str = "abc__\x01\x02\x03__abc"
my_str = str(bytes_num) + my_str
print(my_str)
print(bytes(my_str,'utf-8'))
输出是
b'\x00\xe7'abc__☺☻♥__abc
b"b'\\x00\\xe7'abc__\x01\x02\x03__abc"
我也尝试过使用解码方法,但如果十六进制值不是 'utf-8' 发生错误,或者如果我使用“忽略”或“替换”进行错误处理,它会更改值。仅当字节为“utf-8”时才有效。 也使用 'latin1' 和 'iso' ,同样的事情。 例如:
given_num = 231
bytes_num = given_num.to_bytes(2,'big')
my_str = "abc__\x01\x02\x03__abc"
my_str = bytes_num.decode("utf-8") + my_str
错误: UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe7 in position 1: unexpected end of data
也试过 chr()
given_num = 231
my_str = "abc__\x01\x02\x03__abc"
my_str = chr(given_num) + my_str
输出再次不是首选:
çabc__☺☻♥__abc
b'\xc3\xa7abc__\x01\x02\x03__abc'
如您所见,前 2 个字节是 [0xc3][0xa7],我想看到
b'\x00\xe7abc__\x01\x02\x03__abc'
(给定数字的十六进制值,以字节为单位)
在 C 语言中,我会执行上述操作
printf("%c%c some string ",0,231)
但这不适用于python格式:
my_str = "abc__\x01\x02\x03__abc"
my_str = "%c" % (231) + my_str
同样的输出,231 被翻译为 2 个字节 [0xc3][0xa7] 而不是 231 十进制数的一个字节十六进制表示 [0xe7]:
çabc__☺☻♥__abc
b'\xc3\xa7abc__\x01\x02\x03__abc'
【问题讨论】:
标签: python python-3.x byte