各位大侠,来急救啊,在线等啊,最后的分数了

charly_ye 2007-08-10 03:33:38
问题描述:10进制数值518
接收用的 byte数组 data(0)=16进制 02 data(1)=进制 06
和起来就是0206
但是对接收的数据处理的时候,VB默认的把data(1)这样的数值,从unicode转换为了单个byte表示,上面的数值 就变成了 26 ,结果就得到错误数值了

而如果是 02 16 ,VB就识别为unicode,处理就能得到正确结果
各位大侠,这个应该怎么作啊

在下初学VB,各位路过的好人来急救啊
...全文
154 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
mmyyxx88 2007-08-11
  • 打赏
  • 举报
回复
"下位机发送回来",一般按两种方式。
1、按字节数据发送。如&H175A, 发送两个数为:23、90。我上面的代码就假设为这种发送方式。
2、按字符发送。如&H175A, 发送“1”“7”“5”“A”四个字符。
charly_ye 2007-08-11
  • 打赏
  • 举报
回复
看来我没有把题意讲清楚啊,我做串口通信,下位机发送回来的是16进制的数值,
是从16进制 转换为10进制
你的代码,还是很有参考价值的,我会试试看先
charly_ye 2007-08-11
  • 打赏
  • 举报
回复
恩,这位大侠的方法,的确可以,
在下先谢过了,等程序做完,交货,请你喝茶
mmyyxx88 2007-08-10
  • 打赏
  • 举报
回复
你接收到的本来就是十进制数,何苦再转换成16进制,然后又再转换为10进制.
按我理解你的题意,写了一段代码.
Function Data1andData2(data1 As Byte, data2 As Byte) As Long
Dim tmp As Long
tmp = 256
tmp = tmp * data1 + data2
If tmp > 32768 Then tmp = tmp - 65536
Data1andData2 = tmp
End Function

'再写一段测试程序
Private Sub Command1_Click()
Dim data(2) As Byte
Dim tmp As Long

'测试组一
data(0) = 2
data(1) = 6
tmp = Data1andData2(data(0), data(1))
Debug.Print "data(0)=2, data(1)=6 时 "; tmp

'测试组二
data(0) = &H2
data(1) = &H6
tmp = Data1andData2(data(0), data(1))
Debug.Print "data(0)=&H2, data(1)=&H6 时 "; tmp

'测试组三
data(0) = &HFF
data(1) = &HEA
tmp = Data1andData2(data(0), data(1))
Debug.Print "data(0)=&HFF, data(1)=&HEA 时 "; tmp

'测试组三
data(0) = 208
data(1) = 186
tmp = Data1andData2(data(0), data(1))
Debug.Print "data(0)=208, data(1)=186 时 "; tmp

End Sub


运行结果:
data(0)=2, data(1)=6 时 518
data(0)=&H2, data(1)=&H6 时 518
data(0)=&HFF, data(1)=&HEA 时 -22
data(0)=208, data(1)=186 时 -12102
charly_ye 2007-08-10
  • 打赏
  • 举报
回复
dim data() as byte

data(0)=&HFF
data(1)=&HEA

dim temp as string
temp = hex(data(0))+hex(data(1))

text1.text = hex_to_dec(temp)

我的程序基本是上面这样写的,
然后就是不要像 02 06 这样的2个数值,都能正确处理,比如像02 16,VB就能识别为2个byte的unicode,
charly_ye 2007-08-10
  • 打赏
  • 举报
回复
这位大侠提供的,的确可以解决我这里提出来的问题,
但是我整个程序里面是把两个数组位置 里面的16进制代码 合并到一起 然后用hex_to_dec()就是16进制转10进制的函数来得到10进制数
比如 data(0)=&HFF data(1)=&HEA hex_to_dec(FFEA) 就得到 65514 就是65536 -22
用来表示 -22
如果用大侠的这种方法,好像还不能满足我的需要,
我想要的效果: data(0)=&h02 data(1)=&h06
然后 dim data2 as string
data2 = 206
然后 value=hex_to_dec(data2)
现在的问题就是怎么把data数组的2位,正确的合并到data2 这个字符串中


charly_ye 2007-08-10
  • 打赏
  • 举报
回复
好像可以,需要 try 一下
benyfeifei 2007-08-10
  • 打赏
  • 举报
回复
楼上正解。

组合后直接显示,不用考虑Unicode的问题。
charly_ye 2007-08-10
  • 打赏
  • 举报
回复
是的,接收需要整合为一个整数,然后再转换为10进制显示
mmyyxx88 2007-08-10
  • 打赏
  • 举报
回复
接收用的 byte数组
而发送是16位的数据,把高8位和低8位进行分离后发送。
你收到的是分离数据后,应该再对数据加以处理,如收到2、6两个数,那么它的结果应该是2*256+6=512+6=518, 也就是16进制表示的0206H
benyfeifei 2007-08-10
  • 打赏
  • 举报
回复
没看懂你的问题。

你是不是想在接收程序里将两个字节(比如 &H02,&H06)组合成一个整数啊?!

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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