通过UDP发送的int是字节

2024-03-19 09:35:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我从Mac上的MaxMSP通过UDP发送int到运行在raspberrypizero上的Python。然后,INT被发送到一个使用自己的库的点阵显示器(Micro-dot-Phat)。在

我遇到的问题是int被显示为

b'int\x00,i\x00\x00\x00\x00\x00\x00

无论是打印还是作为字符串写入显示器。在

我花了几天时间在google上搜索这个,并尝试了解包结构, int.from_字节和decode('utf-8')方法的建议,几个相关的问题,但似乎无法提取(1,2,3,4,5,等等),我想在显示器上。在

显示需要一个write_字符串,所以我想我需要将字节格式转换为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发送的字符串按预期显示在显示器上,而不是int

^{2}$

这将发送到点矩阵显示

   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]

Tags: 字符串fromipdata字节socket显示器struct
1条回答
网友
1楼 · 发布于 2024-03-19 09:35:15

您可以使用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)

输出

^{pr2}$

如果这不是正确的整数,那么您需要找出数据是如何编码的。在


看起来\x00,i也是报头的一部分,因此我们需要将切片操作调整为

n = int.from_bytes(bstring[6:], 'little')

相关问题 更多 >