用UDP对java中C结构数据包进行解码

用UDP对java中C结构数据包进行解码,java,android,c,udp,Java,Android,C,Udp,以下是我的Android应用程序java代码: 我能够接收数据包,但无法以正确的方式解码。另一方面,我正在发送结构(C程序)中的数据包。我无权更改服务器代码,所以我需要将服务器结构数据包解码为java对象??提前感谢。使用包装从p.getData()获取的字节[]。 然后使用ByteBuffer的getXXX方法检索相应的值 第一个char“frameType”的示例如下: char frameType = (char) myByteBuffer.get(); // getChar() woul

以下是我的Android应用程序java代码:


我能够接收数据包,但无法以正确的方式解码。另一方面,我正在发送结构(C程序)中的数据包。我无权更改服务器代码,所以我需要将服务器结构数据包解码为java对象??提前感谢。

使用包装从
p.getData()获取的
字节[]
。 然后使用ByteBuffer的getXXX方法检索相应的值

第一个
char
“frameType”的示例如下:

char frameType = (char) myByteBuffer.get(); // getChar() would fetch 2 bytes !!

有关更多信息,请参阅ByteBuffer doc。

如何定义“正确方式”?您不能更改服务器,但您应该可以访问数据包格式,请告诉我们。同样,将数据包数据打印为文本是错误的,只需使用十六进制。从某种意义上说,正确的方式是,要打印我从C结构收到的数据,如果我使用上面的字符串对其进行编码,用java打印一些二进制/可理解的格式…@JIV这是我的C结构
typedef struct{char frameType;char frameInfo;无符号短持续时间;无符号字符地址1[6];无符号字符地址2[6];无符号字符地址3[6];无符号短序列控制;无符号短序列控制;}MacHeader;

我这样发送,
sendto(sockfd,&cmdReq,pktlen,0,(struct sockaddr*)和servaddr,sizeof(servaddr));这样您就有了所有字节计数。将字节[]读入字节缓冲符,然后让它吐出适当的类型。例如:char For char,unsigned short-可能是int,char[]到char[]或字符串等。int val=字节[1]
char frameType = (char) myByteBuffer.get(); // getChar() would fetch 2 bytes !!