为什么老是说“下标越界”?

jiangyang6 2002-12-25 08:28:31
我想把从串口取进来的十六进制数放到文本框显示,比如:FF CD AD 23 45 00 00 00 23 进来一共9个字节,显示其中8个
我现在的问题是从串口读数据是正常的可是下面程序再运行时老显示“下标越界”,可是我用断点运行可以通过,不知为什么?
dim ab(10) as byte
dim CHAR(10) as string
dim av as variant
dim i as integer
If ab(1) = &HFC Then ;从串口的第一个字节,表明该执行什么任务
with mscomm1
CHAR(0) = ""
For i = 0 To 7 Step 1 ;循环从串口读数据,存入ab()
av = .Input ;我在这里设置断点,然后运行可以通过
ab(i) = av(0) ;!!!这个地方老给我显示下标越界
Next
For i = 0 To 7 Step 1
CHAR(0) = CHAR(0) & str(ab(i)) & " " ;把数据以”20 23 56 15“格式显示
Next
Text6.Text = CHAR(0)
End If
还有个问题是如果我把dim av as variant改为dim av() as variant,为什么会显示类型不匹配。
取进来的字节数是对的,我已经用串口测试工具测过。
新手上路,麻烦大家多多照顾!!!
...全文
107 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
大鱼 2002-12-31
  • 打赏
  • 举报
回复
dim a as string*20
for i=1 to 10
ab(i)=cbyte(mid(a,i,2))
next
你可以试一试
zhsu 2002-12-31
  • 打赏
  • 举报
回复
你ab(0)
av
是如何定义的?
icansaymyabc 2002-12-26
  • 打赏
  • 举报
回复
你糊塗
shepherd228 2002-12-26
  • 打赏
  • 举报
回复
你的AB()怎么定义的啊?
dim ab(0 to 9) as byte
用户 昵称 2002-12-26
  • 打赏
  • 举报
回复
u can use this to declare the ab array

dim ab( 0 to 10 ) as byte

if u use dim ab(10) as byte may be like this dim ab( 1 to 10 ) as byte.
jiangyang6 2002-12-25
  • 打赏
  • 举报
回复
现在问题又来了,我的程序要可以接收两种不同字节数的数据。
于是我在ONCOMM中加了这么一段程序:
if x=0 then ;x是判断进来的数应该是几个字节,初始为0
do
doevents
loop until .inputbuffercount>=3
elseif x=1 then
do
doevents
loop until .inputbuffercount>=9
end if
x=0
av=.input
ab(0)=av ;又显示下标越界

不过以前那个接受9个字节的程序却不显示这样的错误
这究竟是为什么啊?
jiangyang6 2002-12-25
  • 打赏
  • 举报
回复
哦,好象是这样的。
我再去试试。谢谢
zhsu(做人Bata版) 你说的判断是不是指判断串口缓冲池内到的数据够不够?
zhsu 2002-12-25
  • 打赏
  • 举报
回复
哦,应该是你从串口读出来的数据还没有完成就开始解析的缘故。你在解析数据前先加一个判断,数据量是否够,否则不予解析就可以了。(也就是在从串口缓冲池读取前先判断数据量,确认后再读取就可以了。)
lbd8848 2002-12-25
  • 打赏
  • 举报
回复
加一句redim av(1)试试

7,759

社区成员

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

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