繁体   English   中英

PYTHON 3+:如何在不解码的情况下将字节添加到字符串中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM