C#上位机数据进制转换

z20110411 2017-04-26 08:35:06
现在遇到一个问题,下位机发送两个数据到上位机,上位机可以正确按字节接受到了。剩余的是将两个字节数据合并成一个整数,用于波形显示。具体如下
单片机要发送的数据是:
short pitch=50,roll=280

上位机按照十六进制接收数据如下:
00 32 01 18

这个结果是正确的。
我将每两个字节数据拼接成一个C#里面的Int 32 类型的数据,但结果显示错误:
00 32 01 18 //上位机接收到的十六进制数据
69632 1024//数据拼接后显示的数据

采用的拼接方法如下:
pitch = (UsefulData[0] << 8 + UsefulData[1]);//UsefulData是上位机解析数据帧之后存储的有效数据数组

roll = (UsefulData[2] << 8 + UsefulData[3]);

单片机发送数据是高低位是高字节在前,所以不会是字节顺序的问题,那请问还可能是其他什么原因呢,恳请各位大神指教呀。
...全文
219 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
z20110411 2017-04-27
  • 打赏
  • 举报
回复
自己把正确答案贴出来,给遇到同样问题的同学节省点时间,其实这个问题很简单,最主要还是自己的C语言不过关,基本数据的操作不熟料导致的。不废话,正确答案是这样的:
pitch = (short)(DemoData[0] << 8 |DemoData[1]);
                                roll = (short)(DemoData[2] << 8 |DemoData[3]);
当然也会有其他方法,大家自己可以尝试。
z20110411 2017-04-27
  • 打赏
  • 举报
回复
引用 2 楼 qq_37099730 的回复:
string s = String.Concat(A,B); 我位拼接用的是这个语句
嘿嘿,新手,不知道这个函数,多谢呀
z20110411 2017-04-27
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
pitch = (UsefulData[0] << 8) + UsefulData[1];
roll = (UsefulData[2] << 8) + UsefulData[3];
谢谢啊,我试试改这里。
qq_37099730 2017-04-26
  • 打赏
  • 举报
回复
string s = String.Concat(A,B); 我位拼接用的是这个语句
xuzuning 2017-04-26
  • 打赏
  • 举报
回复
pitch = (UsefulData[0] << 8) + UsefulData[1];
roll = (UsefulData[2] << 8) + UsefulData[3];

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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