[英]PYTHON 3+: How to add a byte into a string without decode
所以我有我的字符串,我想预先添加 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'))
output 是
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”编解码器无法解码 position 1 中的字节 0xe7:数据意外结束
也试过 chr()
given_num = 231
my_str = "abc__\x01\x02\x03__abc"
my_str = chr(given_num) + my_str
output 再次不是首选:
ç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
output 再次相同,231 被翻译为 2 个字节[0xc3][0xa7]而不是 231 十进制数[0xe7]的一个字节十六进制表示:
çabc__☺☻♥__abc
b'\xc3\xa7abc__\x01\x02\x03__abc'
你可以尝试这样的事情:
def do_stuff(input_str: str, nb1: int, nb2: int):
return hex(nb1) + hex(nb2) + input_str
print(do_stuff("test", 0, 231))
这将产生这个字符串:0x00xe7test
如果您想使用 \x 而不是 0x 表示法,您可以使用 str.replace 或 regex 根据需要更改结果字符串。
我将“可打印”字符串转换为字节
然后我将字符串作为字节数组处理
given_num = 231
bytes1 = b"abc__\x01\x02\x03__abc"
bytes2 = bytes([0,given_num])
bytes_res = bytes2 + bytes1
print(bytes_res)
Output:
b'\x00\xe7abc__\x01\x02\x03__abc'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.