2023年7月15日发(作者:)
pythonsocket发送16进制数据_PythonUDPSocket16进制数据发送特别标注:有些⽹站转载我的⽂章不标明出处,并且转载不到位,没有把相应的链接⼀块转过去,⽐如说下载链接或相关⽂献的链接等,导致⼀些⽹友阅读和使⽤出现障碍和知识的不连续,所以在此特别标注:我的这篇⽂章发表在CSDN博客上,可以到CSDN博客来阅读。正题:今天琢磨了⼀下Python UDP Socket 16进制数据发送。原以为UDP发送和接受的都是字符,怎么能够发送16进制?但细想,其实接收的都是“010100101******”这样的东东。所有,要想发送16进制也是可以做到的。要实现这个东东,就得⽤到字节byte,因为Python中没有字节(Byte)类型(可以把这⾥的字符串理解为字节流),所以得⽤到python的struct模块来进⾏字节流转换。我的思路是这样⼦的:1、⾸先假设有这样⼀个16进制字符串str: B1 C2 FF 822、利⽤python的字符数组符号分割字符串str,把字符串⾥⾯的16进制数据字符分割出来:“B1”, "C2", "FF","82";3、通过函数int( s, 16)把16进制转换成整形数【函数⾥⾯s代表⼀个16进制字符串】;4、利⽤python提供的struct模块⾥的(fmt,v1, v2, ...)函数把整形转换成字节流【具体知识请看附录】;5、利⽤函数发送字节流。【例⼦:部分重点代码】addr1 = ("192.168.1.100", "8000")UDPSock = socket(AF_INET, SOCK_DGRAM)str = "B1C2FF82" #获取字符测str1 = "" #初始化str2 = "" #初始化while str:str1 = str[0:2] #分割字符串,获取前两个字符s = int( str1, 16) #字符串转换成16进制str2 += ('B', s) #转换成字节流,“B“为格式符,代表⼀个unsigned char (具体请查阅struct)str = str[2:] #分割字符串,去掉字符串前两个字符while(1):if((str2, addr1)):pass #UDP发送数据()break如此便可以实现UDP客户端的16进制发送。【附录】python只定义了6种数据类型,字符串,整数,浮点数,列表,元组,字典。但是C语⾔中有些字节型的变量,在python中该如何实现呢?这点颇为重要,特别是要在⽹络上进⾏数据传输的话。python提供了⼀个struct模块来提供转换。下⾯就介绍这个模块中的⼏个⽅法。():⽤于将Python的值根据格式符,转换为字符串(因为Python中没有字节(Byte)类型,可以把这⾥的字符串理解为字节流,或字节数组)。其函数原型为:(fmt, v1, v2, ...),参数fmt是格式字符串,关于格式字符串的相关信息如下图所⽰,v1, v2, ...表⽰要转换的python值。下⾯的例⼦将两个整数转换为字符串(字节流): >>> import struct >>> a=20 >>> b=400 >>> str=('ii',a,b) #转换成字节流,虽然还是字符串,但是可以在⽹络上传输 >>> print len(str) #ii 表⽰两个int 8 #可以看到长度为8个字节,正好是两个int型数据的长度 >>> print str #⼆进制是乱码 >>> print repr(str)'x14x00x00x00x90x01x00x00' #其中⼗六进制的 0x00000014, 0x00001009分别表⽰20和400 >>> 由此我们就可以任意的进⾏组包了,⽐如下⾯⼀个打包的例⼦,只介绍其中的pack format = "!HH%ds" % len(data) buffer =(format,opcode,blocknumber,data) 我们要对⼀个数据进⾏打包,加上⼀些个包头,我们根据下⾯的格式符信息,知道H是unsigned short是2个字节,⽽s是char型。所以这个buffer就是2个字节的opcode,2个字节的blocknumber,和len长的char。 函数: (): 我们接着上⾯的例⼦运⾏: >>> a1,a2=('ii',str) >>> print 'a1',a1 a1 20 >>> print 'a2=',a2 a2=400 可以看到 “ii”以四个字节为分界,把8个字节的str分成了两个int型的整数。 ze():⽤来计算特定格式的输出的⼤⼩,是⼏个字节,⽐如: >>> ze('HH4s') 8 >>> ze('ii') 8 >>> >>> format='!HH%ds' % len('hello python') >>>ze(format) 16 >>>
发布者:admin,转转请注明出处:http://www.yc00.com/web/1689409171a243390.html
评论列表(0条)