16进制字符的显示
socket.recv()
读取到的是字节流,需要通过socket.decode()
转换为utf-8
编码等之后才能对应转换为字符串
若未编码直接通过print()
打印显示,如:
发送方发送:0x1e 0x01 0x61 0x01 0x0a 0x01 0x66 0x01 0x66 0xff
接收方读取接收缓存区并将其直接print()
打印出来,则显示: b'\x1e\x01a\x01\n\x01f\x01f\xff'
这是可能是因为:
- 通过
print()
显示字节流,若该字节对应的ascii
码 可显示,则直接显示,否则才会显示对应的ascii
码 - 如上例中,
0x61
对应a
,0x0a
对应'\n'
,0x66
对应f
具体原因待查证
去除待发送数据中相同的元素
- 思路:
利用 set 内的元素不会重复的特性:
将数据内容转换为 list,然后再转换为 set,最后复原为原来的形式。
- 例如:
list1 = []
list1.append( (299, 1, 2, 3, 4, 'tcp test, 1648104833'))
list1.append( (299, 1, 2, 3, 4, 'tcp test, 1648104833'))
list1.append( (299, 3, 2, 3, 4, 'tcp test, 1648104833'))
list1.append( (300, 1, 2, 3, 4, 'tcp test, 1648104833'))
list1.append( (300, 1, 2, 3, 4, 'tcp test, 1648104833'))
list1.append( (300, 2, 2, 3, 4, 'tcp test, 1648104833')) # 测试数据
set1 = set(list1)
list1 = list(set1)
print(list1)
#执行结果:
#[(300, 2, 2, 3, 4, 'tcp test, 1648104833'), (299, 1, 2, 3, 4, 'tcp test, 1648104833'), (300, 1, 2, 3, 4, 'tcp test, 1648104833'), (299, 3, 2, 3, 4, 'tcp test, 1648104833')]