java如何解析C编写发送的下列格式的udp数据包

suletian 2008-04-18 04:04:54
最近做一个实时信息系统项目,DCS系统通过TCP/IP协议的UDP广播方式发送数据包,广播周期3秒。
数据包格式:
{
数据包标识(char*3) //"MIS"标识,char类型1个字节
源节点号(char*4) //发送方IP地址,char类型1个字节
数据点类型(short int) //值为0~8,分别代表AI、RT... ,short int类型2个字节
数据区长度(short int) //数据点长度*数据点数short int类型2个字节
数据点数(short int) //本数据包数据点个数short int类型2个字节
数据区(根据数据点类型,每个数据点长度×数据点数)
}

已经可以获取数据包,定义byte[] buf = new byte[512];存储数据包,byte数组转换成字符串显示,System.out.println(new String(buf)):
MISddd ?????????????????????????????????????????????????????????

显示每个字节前13个字节内容如下:77 73 83 100 100 100 0 0 0 -14 1 83 0

java int型占4个字节,把其中short int转换int数值不正确,还有负数不可能出现,求高手解答。
...全文
325 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
UltraBejing 2008-05-01
  • 打赏
  • 举报
回复
我也想了解,谢谢LZ.
suletian 2008-04-21
  • 打赏
  • 举报
回复
首先谢谢你的回答,java的int转换byte数组和byte数组转换int的位操作我会做,java中int是4个字节操作,也就是4个字节才能还原成int,所以用2个字节转换成int,得出的数值不正确。我认为应该按c语言中的int与byte数组转换方法才能还原,望解答c语言中的int与byte数组转换方法。
薛定谔之死猫 2008-04-18
  • 打赏
  • 举报
回复
你取到的字节数组,没办法直接转,使用Java的位操作合吧,比如将两个字节取出来,与int 0进行按位或操作,然后左移8位,再按位或,如此这般,你的包头内容也不多,应该可行

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧