从字节中删除非十六进制

时间:2014-12-18 01:58:25

标签: python byte

我有一个来自机械臂的数据流,如下图所示。但是,我会从源控制器接收其他字符。我怎样才能删除这些不良角色?

Datastream的: B' \ X00 \ X00 \ X04 \ XE6 \ X10 \ X00 \ X00 \ X00 \ X1D \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ r \ xd8c \ X01 \ X01 \ X01 \ X00 \ X00 \ X00 \ X00 \ X00?\ XF0 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ xfb的\ X01 @ \ X06 \ XCA \ XF1!\ xfdD \ x9b @ \ X06 \ XCA \ XE7 \& #39; \ x15k \ xa7 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 = \ xb2

期望的结果: B' \ X00 \ X00 \ X04 \ XE6 \ X10 \ X00 \ X00 \ X00 \ X1D \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ XD8 \ X01 \ X01 \ X01 \ X00 \ X00 \ X00 \ X00 \ X00 \ XF0 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ XFB \ X01 \ X06 \ XCA \ XF1 \ xfdD \ x9b \ X06 \ XCA \ XE7 \ x15k \ XA7 \ X00 \ X00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ xb2

CNC中 我现在的代码现在没有删除不需要的字符

import socket
import struct
import time
HOST = '192.168.1.10'
PORT = 300002
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST,PORT))
data = s.recv(89)
data2 = struct.unpack("!iBiBQ7?2B2diB3d4fB", data)
print(data2)
s.close()

2 个答案:

答案 0 :(得分:0)

由于你没有说明为什么你认为这些字符是不受欢迎的,我会假设你认为无关的字符是“不受欢迎的”,而它们实际上很重要。

"@" has a hex value 0x40
"D" has a hex value 0x44

搜索ASCII或ANSI以查看原因。

打印字符是因为您将值显示为字符串。 在计算机的内存中,它们仍然是十六进制数字!

相同的字节流可以表示为字符串,也可以作为数字读取。 例如,您可能希望将它们读作八位字节(字节),或int s或单精度浮点数。

修改

例如,您会注意到字节18是“c”。请注意ASCII代码ord('c')=990x63

要将字符视为整数值,您可以执行以下操作:

[ord(x) for x in mystream]

并以十六进制显示

[hex(ord(x)) for x in mystream]

答案 1 :(得分:0)

for item in data2: if item == "whatever": data2.pop(item)

P.S我正在使用手机,代码可能没有正确缩进。