注:此篇文章首次发表于我的一篇CSDN博客里边,现转载于此。
今天琢磨了一下Python UDP Socket 16进制数据发送。
原以为UDP发送和接受的都是字符,怎么能够发送16进制?但细想,其实接收的都是“010100101******”这样的东东。所有,要想发送16进制也是可以做到的。
要实现这个东东,就得用到字节byte,因为Python中没有字节(Byte)类型(可以把这里的字符串理解为字节流),所以得用到python的struct模块来进行字节流转换。
我的思路是这样子的:
1、首先假设有这样一个16进制字符串str: B1 C2 FF 82
2、利用python的字符数组符号分割字符串str,把字符串里面的16进制数据字符分割出来:“B1”, “C2″, “FF”,”82″;
3、通过函数int( s, 16)把16进制转换成整形数【函数里面s代表一个16进制字符串】;
4、利用python提供的struct模块里的struct.pack(fmt,v1, v2, …)函数把整形转换成字节流【具体知识请看附录】;
5、利用socket.sendto函数发送字节流。
【例子:部分重点代码】
C++
addr1 = ("192.168.1.100", "8000")
UDPSock = socket(AF_INET, SOCK_DGRAM)
str = "B1C2FF82" #获取字符测
str1 = "" #初始化
s