Python UDP客户端发送十六进制值显示异常问题求助
问题解决:UDP客户端发送正确的十六进制字节值
你的问题根源在于字符串编码转换:
当你用"\xCA\xFE"定义Unicode字符串,再调用encode("utf-8")时,Python会将U+00CA(É)和U+00FE(þ)这两个Unicode字符按照UTF-8规则编码为多字节序列C3 8A和C3 BE,这就是终端显示异常的原因。
要发送原始的单字节十六进制值,直接构造bytes对象即可,无需经过字符串编码步骤,修改后的代码如下:
import socket as socket_library if __name__ == "__main__": ipv4_local_host = "192.168.56.1" server_port = 35970 addr = (ipv4_local_host, server_port) bufferSize = 4096 # Create a UDP socket at client side socket_client = socket_library.socket(family=socket_library.AF_INET, type=socket_library.SOCK_DGRAM) # 直接构造字节串,\xCA和\xFE会被解析为单字节十六进制值 data = b"\xCA\xFE" # 无需再调用encode,直接发送bytes对象 socket_client.sendto(data, addr)
补充方案:使用bytes.fromhex()
如果需要发送较长的十六进制序列,用bytes.fromhex()会更直观,比如:
# 空格分隔的十六进制字符串,会被解析为对应的字节 data = bytes.fromhex("CA FE")
这样修改后,Hercules终端就能正确显示0xCA和0xFE了。
内容的提问来源于stack exchange,提问作者AIED
相关产品推荐
相关产品推荐

