我需要从DatagramPacket 2基元数据类型和字节数组中恢复;
我需要一个无符号的长,和一个int作为原始数据类型.当我尝试用System.arraycopy每个变量手动复制时,它似乎会使我无法获得与发送它相同的值.另外,我不确定哪种数据类型与Java中的无符号long等效.
第一个变量是时间戳,第二个变量是我应该得到的下一个字节数组的大小。
使用C语言,我只需使用以下命令就可以做到这一点:
unsigned long long timestamp = 0;
memcpy(×tamp, packetData, sizeof(unsigned long long));
packetData += sizeof(unsigned long long);
int sizePacket;
memcpy(&sizePacket, packetData, sizeof(int));
packetData += sizeof(int);
char *encodedData = (char*)malloc(sizePacket);
if (encodedData != nil)
memcpy(encodedData, packetData, sizePacket);
发布于 2013-12-30 12:47:31
我使用long
作为64位值。如果它是时间戳,您可能不需要担心溢出,但如果您是有办法纠正这一点。在Java中,32位int
值只是int
。
System.arraycopy只是复制字节,它不知道endianness,也不改变它。
很可能您希望使用带有本机字节顺序的ByteBuffer。你就会得到你想要的。
DatagramSocket ds = ...
ByteBuffer bb = ByteBuffer.wrap(ds.getData()).order(ByteOrder.nativeOrder());
long timestamp = bb.getLong();
int number = bb.getInt();
// use the bb to read the encoded data.
https://stackoverflow.com/questions/20839845
复制相似问题