我需要从DatagramPacket 2原始数据类型和字节数组中恢复;
我需要获得一个unsigned long long,并将int作为原始数据类型... 当我尝试使用System.arraycopy手动复制每个变量时,它似乎与字节顺序混乱我得不到与发送时相同的值... 另外,我不确定哪种数据类型与Java中的unsigned long 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);
答案 0 :(得分:1)
我使用long
作为64位值。如果是时间戳,您可能不需要担心溢出,但如果您有解决此问题的方法。 Java中的32位int
值只是int
。
System.arraycopy只复制字节,它不知道字节序,也不会改变它。
您最有可能希望将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.