| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1617 人关注过本帖
标题:数据类型不同,赋值时提示错误。
只看楼主 加入收藏
初始元灵
Rank: 2
等 级:论坛游民
帖 子:72
专家分:46
注 册:2016-10-10
结帖率:91.67%
收藏
已结贴  问题点数:10 回复次数:11 
数据类型不同,赋值时提示错误。
与下位机进行通讯,发送一个字符串指令过去,返回一个字符串

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

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

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

该怎样修改才对?

Byte2(1) = Mid(tmpS, 7 + 2 * i, 1)  '就这句话,等号后面就是 F
 
2016-10-17 10:48
初始元灵
Rank: 2
等 级:论坛游民
帖 子:72
专家分:46
注 册:2016-10-10
收藏
得分:0 
版主版主,求拯救。

三清之始
2016-10-17 10:53
初始元灵
Rank: 2
等 级:论坛游民
帖 子:72
专家分:46
注 册:2016-10-10
收藏
得分:0 
我这样写可以吗?
Byte2(1) = Hex(Mid(tmpS, 7 + 2 * i, 1))

三清之始
2016-10-17 11:01
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:5 
Byte2(1) = asc(Mid(tmpS, 7 + 2 * i, 1))-asc("A")+10
Byte2(1)="F"=15
mid、hex都是字符串函数,返回的都是字符串类型,byte型是数值类型。

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

2016-10-17 11:04
初始元灵
Rank: 2
等 级:论坛游民
帖 子:72
专家分:46
注 册:2016-10-10
收藏
得分:0 
回复 4楼 xzlxzlxzl
也就是说不能将 F 赋值给Byte2(1)会报错,将15直接赋给它吗。

三清之始
2016-10-17 11:15
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:0 
这其实是将字符型的16进制数转换为数值的问题,如果你从上位机接受来的数据是2位的16进制数的字符串的话,最终需要变换为数值进行运算,这种转换需要自己写个函数完成。
2016-10-17 11:20
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:5 
Mid 返回的是字符串,而 VB6 里,字符串属复杂类型,保存的是指针。
BYTE,是简单类型,在内存里直接保存值。

你可以理解为 BYTE保存的是一个 0-255 的数值,而单个字符使用 asc 转化为这个值后,就可以保存到这个 BYTE 里去了。
-----------------
接收下位机,为啥是用 字符串接收,不是用  BYTE() 接收吗?

授人于鱼,不如授人于渔
早已停用QQ了
2016-10-17 15:42
初始元灵
Rank: 2
等 级:论坛游民
帖 子:72
专家分:46
注 册:2016-10-10
收藏
得分:0 
回复 7楼 风吹过b
我同学写的发送字符串过去,其实是可以用字节的,这个坑货!

三清之始
2016-10-17 16:24
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
接收时,如果纯ASCII 码,用字符串接收也没啥问题。
如果需要取字节,收到后用
StrConv 函数整体转换一下吧。

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




授人于鱼,不如授人于渔
早已停用QQ了
2016-10-17 17:01
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
接收时,如果纯ASCII 码,用字符串接收也没啥问题。
如果需要取字节,收到后用
StrConv 函数整体转换一下吧。

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




授人于鱼,不如授人于渔
早已停用QQ了
2016-10-17 17:01
快速回复:数据类型不同,赋值时提示错误。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016627 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved