首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java DatagramPacket读取原语数据类型

Java DatagramPacket读取原语数据类型
EN

Stack Overflow用户
提问于 2013-12-30 12:43:34
回答 1查看 412关注 0票数 0

我需要从DatagramPacket 2基元数据类型和字节数组中恢复;

我需要一个无符号的长,和一个int作为原始数据类型.当我尝试用System.arraycopy每个变量手动复制时,它似乎会使我无法获得与发送它相同的值.另外,我不确定哪种数据类型与Java中的无符号long等效.

第一个变量是时间戳,第二个变量是我应该得到的下一个字节数组的大小。

使用C语言,我只需使用以下命令就可以做到这一点:

代码语言:javascript
运行
复制
unsigned long long timestamp = 0;
memcpy(&timestamp, 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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-30 12:47:31

我使用long作为64位值。如果它是时间戳,您可能不需要担心溢出,但如果您是有办法纠正这一点。在Java中,32位int值只是int

System.arraycopy只是复制字节,它不知道endianness,也不改变它。

很可能您希望使用带有本机字节顺序的ByteBuffer。你就会得到你想要的。

代码语言:javascript
运行
复制
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.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20839845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档