我正在用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'
...
我需要这些转换才能仅生成十六进制值,因为我的接收套接字代码无法识别其他任何内容。有什么想法吗?
答案 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个字节:0
,x
和a