我通过UDP发送到Mac上的MaxMSP,通过UDP发送到在RaspberryPi Zero上运行的Python。然后使用自己的库将整数发送到点阵显示器(Micro Dot Phat)。
我遇到的问题是整数显示为;
b'int \ X00,I \ X00 \ X00 \ X00 \ X00 \ X00 \ X00
打印时和作为字符串写入显示屏时。
我花了几天时间用谷歌搜索这个并尝试了几个相关问题所建议的struct.unpack,int.from_bytes和decode('utf-8')方法,但似乎无法提取(1,2,我希望在显示屏上显示3,4,5等等。
显示需要一个write_string,所以我认为我需要将字节格式转换为python int,然后是字符串或直接转换为字符串。
任何帮助都将不胜感激。
请求的代码;
import socket
import struct
UDP_IP = "My Pi's IP"
UDP_PORT = 'My chosen port"
mystring = ""
serverSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
serverSOCK.bind((UDP_IP, UDP_PORT))
while True:
data, addr = serverSock.recvfrom(1024)
mystring = str(data)
这允许从MaxMSP发送的字符串在显示屏上按预期显示,但不能显示ints
write_string(mystring, kerning=False)
show()
这发送到dotmatrix显示
print (mystring)
方法我试图将字节转换为int而没有任何运气;
data = data.decode('utf-8')
struct.unpack('<' + 'B'*len(data), data)
int.from_bytes(data, byte order='little')
data = struct.unpack(data) [0]
答案 0 :(得分:0)
您可以使用int.from_bytes
方法执行此操作,但需要从bytes
字符串中删除三个初始b“int”字节。
bstring = b'int\x00,i\x00\x00\x00\x00\x00\x00'
n = int.from_bytes(bstring[3:], 'little')
print(n)
<强>输出强>
6892544
如果那不是正确的整数,那么你需要找出数据的编码方式。
看起来\x00,i
也是标题的一部分,所以我们需要将切片操作调整为
n = int.from_bytes(bstring[6:], 'little')