通过UDP发送的Int是字节

时间:2017-10-18 03:06:01

标签: python arrays

我通过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]

1 个答案:

答案 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')
相关问题