python3 UDP协议中浮点数采用utf-8编码发送问题

  1. 我想采用linux系统,python3环境发送双精度浮点数,比如列表[0.01,0.01,0.01]
  2. 我首先将双精度浮点数按照16进制进行转换,其中0.01对应3F 84 7A E1 47 AE 14 7B,代码
    def double_to_hex(f):
    return struct.unpack('<8B', struct.pack('>d', f)
  3. 转换后的列表[3F 84 7A E1 47 AE 14 7B 3F 84 7A E1 47 AE 14 7B 3F 84 7A E1 47 AE 14 7B]
  4. 现在想通过UDP协议将上述列表发送出去,我的远程系统必须按照3F 84 7A E1 47 AE 14 7B 3F 84 7A E1 47 AE 14 7B 3F 84 7A E1 47 AE 14 7B的16进制数据接收,无法修改远程系统。
  5. 但是我发现当采用sendto的utf-8编码发送时,代码如下,
    sock.sendto(str.encode('utf-8'), remote_address)
    列表中3F可以用chr命令得到asccii码,而十六进制的84采用chr命令得到ascii码是超过7F的,造成了sendto命令utf-8发送第二个数据84时得到两个字节的十六进制数据,在netassist上显示c2 84,这与我想得到的84是错误的。
    同理,列表中E1 显示 C3 A1 ,AE显示 C2 AE,也就是所有超过7F的数据得到的16进制结果都是错误的。
  6. 我感觉造成问题的原因时ascii编码超过7F时,utf-8编码的发送结果会产生两个字节的数据,而我现在只能通过某种编码程序在远程系统得到对应字节的数据3F 84 7A E1 47 AE 14 7B 3F 84 7A E1 47 AE 14 7B 3F 84 7A E1 47 AE 14 7B
    现在这个问题改怎么解决呢?

建议在本地写过一遍,浮点数的编码和解码再放到udp中进行通讯。
socket只做套接字的传输,编码规则和解码规则都是你写的。