下位机数据收到后如何拼起来

use_zj 2010-02-03 03:39:09
数据格式怎么拼合出来 下位机那块我说不清楚怎么发
if Val(bytIn(I + 1)) >= 128 Then
num(0) = -(65536 - (Val(bytIn(I + 1)) * 256 + Val(bytIn(I + 2))))
Else
num(0) = Val(bytIn(I + 1)) * 256 + Val(bytIn(I + 2))
End If

这个怎么回事 搞不清楚

给我讲讲下位机那数据发送,弄个例子说说

up有分
...全文
146 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingcsx666 2010-02-03
  • 打赏
  • 举报
回复
友情帮顶
use_zj 2010-02-03
  • 打赏
  • 举报
回复
猴哥 下位机编码格式 我要的就是他 能帮我找点资料吗?
chinaboyzyq 2010-02-03
  • 打赏
  • 举报
回复
num(0) = -(65536 - (Val(bytIn(I + 1)) * 256 + Val(bytIn(I + 2))))
这句的意思就是用补码方式求负数。
chinaboyzyq 2010-02-03
  • 打赏
  • 举报
回复

Dim bytIn(1 To 2) As Byte
Dim num(1) As Long
Dim i As Integer
i = 0
bytIn(1) = 255
bytIn(2) = 255
If Val(bytIn(i + 1)) >= 128 Then
num(0) = -(65536 - (Val(bytIn(i + 1)) * 256 + Val(bytIn(i + 2))))
Else
num(0) = Val(bytIn(i + 1)) * 256 + Val(bytIn(i + 2))
End If

'以上代码说明此数为两字节,高字节在前,低字节在后,高字节大于等于128时表示负数,高字节小于128时表示正数。
'两字节组成的最大数正数是ffff即65535,(Val(bytIn(i + 1)) * 256 + Val(bytIn(i + 2)))最大时为65535,这时num(0)=-1
'注意bytin不会大于255(字节变量)

'其实这样说意义不大,你还是要弄明白下位机的编码格式,不然一切都是白说,因为同是一个数还可以低字节在前而高字节在后。


灵雨飘零 2010-02-03
  • 打赏
  • 举报
回复
帮你顶下
wuyalang2009 2010-02-03
  • 打赏
  • 举报
回复
拼合 可以用移位指令
A 表示高位 B 表示低位
那接收到A 和 B 后
把A移位下 变成A0 然后 加上B 就 等于 AB 的值
khjian 2010-02-03
  • 打赏
  • 举报
回复
没看懂,帮你顶下
yanlongwuhui 2010-02-03
  • 打赏
  • 举报
回复
接收到的2个字节A,B,其中第一个字节的最高位是做为符号用的,所以不能直接用A*256+B来计算。即当第一个大于等于128时,表示为负数,A*256+B -65536;小于128时,才是A*256+B;
chinaboyzyq 2010-02-03
  • 打赏
  • 举报
回复
拼接是有格式说法的,比如BCD编码,ieee754编码等等。你要去了解下位机的编码格式,然后按照下位机的编码格式去拼接,不能瞎拼。

chinaboyzyq 2010-02-03
  • 打赏
  • 举报
回复
顶起来,有空再看一下。
use_zj 2010-02-03
  • 打赏
  • 举报
回复
比如接收到:8 16 这是mscommon接收到的数 他表示一个数 我要怎么计算拼出来。(下位机那大于127就要用2位来发了表示,大于65535就要三位 是不是这么回事?糊涂中。。。。)
cobra009 2010-02-03
  • 打赏
  • 举报
回复
没看懂意思,JF
JavaK 2010-02-03
  • 打赏
  • 举报
回复
不懂单片机,不知道你要实现什么。

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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