注册 登录
编程论坛 VB6论坛

数据类型不同,赋值时提示错误。

初始元灵 发布于 2016-10-17 10:48, 1793 次点击
与下位机进行通讯,发送一个字符串指令过去,返回一个字符串

返回的字符串解析时是从中间提取两个位的值出来,我定义了一个Byte型数组Byte2

从字符串中提取16进制数 F 并赋给Byte2(1)时直接报错,说不匹配

为什么会这样?是因为它没把 F 当成数而是当成了字符吗?

该怎样修改才对?

Byte2(1) = Mid(tmpS, 7 + 2 * i, 1)  '就这句话,等号后面就是 F
 
11 回复
#2
初始元灵2016-10-17 10:53
版主版主,求拯救。
#3
初始元灵2016-10-17 11:01
我这样写可以吗?
Byte2(1) = Hex(Mid(tmpS, 7 + 2 * i, 1))
#4
xzlxzlxzl2016-10-17 11:04
Byte2(1) = asc(Mid(tmpS, 7 + 2 * i, 1))-asc("A")+10
Byte2(1)="F"=15
mid、hex都是字符串函数,返回的都是字符串类型,byte型是数值类型。

[此贴子已经被作者于2016-10-17 11:06编辑过]

#5
初始元灵2016-10-17 11:15
回复 4楼 xzlxzlxzl
也就是说不能将 F 赋值给Byte2(1)会报错,将15直接赋给它吗。
#6
xzlxzlxzl2016-10-17 11:20
这其实是将字符型的16进制数转换为数值的问题,如果你从上位机接受来的数据是2位的16进制数的字符串的话,最终需要变换为数值进行运算,这种转换需要自己写个函数完成。
#7
风吹过b2016-10-17 15:42
Mid 返回的是字符串,而 VB6 里,字符串属复杂类型,保存的是指针。
BYTE,是简单类型,在内存里直接保存值。

你可以理解为 BYTE保存的是一个 0-255 的数值,而单个字符使用 asc 转化为这个值后,就可以保存到这个 BYTE 里去了。
-----------------
接收下位机,为啥是用 字符串接收,不是用  BYTE() 接收吗?
#8
初始元灵2016-10-17 16:24
回复 7楼 风吹过b
我同学写的发送字符串过去,其实是可以用字节的,这个坑货!
#9
风吹过b2016-10-17 17:01
接收时,如果纯ASCII 码,用字符串接收也没啥问题。
如果需要取字节,收到后用
StrConv 函数整体转换一下吧。

需要读 integer 或 long 时,使用 CopyMemory 按字节复制,也可以用 LSET 转换。
简单结构也可以照此转换。



#10
风吹过b2016-10-17 17:01
接收时,如果纯ASCII 码,用字符串接收也没啥问题。
如果需要取字节,收到后用
StrConv 函数整体转换一下吧。

需要读 integer 或 long 时,使用 CopyMemory 按字节复制,也可以用 LSET 转换。
简单结构也可以照此转换。



#11
初始元灵2016-10-17 17:24
坑货收的是16进制组成的字符串。。

最关键解码有问题,我真想虐死他!
#12
风吹过b2016-10-17 19:08
遇到这样的坑,那真是没办法。
收到的字符串,每二位十六进制数据,转 byte 吧!

估计你们写代码前没规划好,甚至没规划。
1