将int转换为十六进制字节会返回ascii字符而不是十六进制值

时间:2019-05-23 14:31:09

标签: python

我正在用Python3编写一些套接字代码,并试图发送一个字节数组'\x00\x00\x00\x01',其中1是用户输入的整数,范围是0到10(所以0到a十六进制)。

我尝试使用here中列出的所有方法制作字节数组,但我总是遇到相同的问题。将9或10转换为十六进制时,分别得到'\ t'和'\ n'。

如果我运行循环

while(i<256):
    print(i, " = ", bytes([i]) )
    i=i+1

我得到的输出大多是十六进制值,但有些是ascii字符:

0  =  b'\x00'
1  =  b'\x01'
2  =  b'\x02'
3  =  b'\x03'
4  =  b'\x04'
5  =  b'\x05'
6  =  b'\x06'
7  =  b'\x07'
8  =  b'\x08'
9  =  b'\t'
10  =  b'\n'
...

我需要这些转换才能仅生成十六进制值,因为我的接收套接字代码无法识别其他任何内容。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果要发送一个字节,似乎应该使用struct.pack

pack_to_send = struct.pack("B", 10)
print(pack_to_send, len(pack_to_send))

输出:

b'\n' 1

这是一个1字节的值。

请勿使用:

hex_ten = hex(10)
print(hex_ten)
value_to_send = hex_ten.encode('utf-8')
print(value_to_send, len(value_to_send))

输出:

0xa
b'0xa' 3

此处从一个以{十六进制表示10的字符串开始,如下所示:0xa,但是encode()转换为字节,但是有3个字节:0xa