尝试解析数据包:是否有一个Java等价于Python的“unpack”?

2024-10-01 15:28:18 发布

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

在Java中,有没有与这个Python函数等价的函数?在

struct.unpack(fmt, string)

我正在尝试将一个用Python编写的解析器移植到Java中,我正在寻找实现以下代码行的方法:

handle, msgVer, source, startTime, dataFormat, sampleCount, sampleInterval, physDim,  digMin, digMax, physMin,  physMax,  freq, = unpack(self.headerFormat,self.unprocessed[pos:pos+calcsize(self.headerFormat)])

我在一个项目的上下文中使用这个方法,在这个项目中,我从网络接收字节,需要提取字节的特定部分来显示它们。在

[编辑2]

我作为更新发布的结论是错误的。我删掉它是为了避免误导别人。在


Tags: 项目方法函数代码posself解析器string
1条回答
网友
1楼 · 发布于 2024-10-01 15:28:18

我不知道有什么真正的等价于Python的Java解包。在

传统的方法是使用DataInputStream从流中读取数据(源于套接字,或者通过ByteArrayInputStream从套接字读取的字节数组)。该类有一组用于读取各种原语的方法。在

在你的情况下,你会做一些类似的事情:

DataInputStream in;
char[] handle = new char[6]; in.readFully(handle);
byte messageVersion = in.readByte();
byte source = in.readByte();
int startTime = in.readInt();
byte dataFormat = in.readByte();
byte sampleCount = in.readByte();
int sampleInterval = in.readInt();
short physDim = in.readShort();
int digMin = in.readInt();
int digMax = in.readInt();
float physMin = in.readFloat();
float physMax = in.readFloat();
int freq = in.readInt();

然后把这些变量变成一个合适的对象。在

请注意,我选择了将每个字段打包到保存它的最小原语中;这意味着将无符号值放入相同大小的有符号类型中。您可能更喜欢将它们放在更大的类型中,这样它们就可以保留它们的符号(例如在int中放入一个unsigned short);DataInputStream有一组readUnsignedXXX()方法,您可以使用这些方法。在

相关问题 更多 >

    热门问题