下面是求校验和的:
dim btss(0 to 3) as byte
btss(0)=&hfc
btss(1)=&h78
btss(2)=&h23btss(3)=btss(0)+btss(1)+btss(2)   '???????就是这句出问题,显示"实时溢出6"
请问如何处理?谢谢各位

解决方案 »

  1.   

    byte的范围是0~256,你算算哪三个数字加起来都407了,怎么着也超出btss(3)的存储范围了。还有一点就是,注意vb中进行计算的时候的隐式数据类型变换,即使你将btss(3)换成一个long形变量来代替也会有溢出错误,需要强制类型转换。改成下面这样就能得到正确的结果Dim i As Long
    Dim btss(0 To 3) As Byte
    btss(0) = &HFC
    btss(1) = &H78
    btss(2) = &H23
    'i = btss(0) + btss(1) + btss(2)
    '上面这句还是会出错
    i = CInt(btss(0)) + CInt(btss(1)) + CInt(btss(2))
    Debug.Print Hex(i)
      

  2.   

    楼上的,校验和是byte型的呀,8位,而不是long型
      

  3.   

    一个字节是8位,你的btss(0)+btss(1)+btss(2)超过了8位能表示的最大的255,当然溢出了。
      

  4.   

    可是btss(3)=btss(0)+btss(1)+btss(2)mod 256也不行呀!
      

  5.   

    转换是没问题的,关键是超出范围了,转换0-255的数字,MOD 是求余数,其实得到的还是原来的数字,
      

  6.   

    校验和业要先将所有的加起来了再作转换处理啊
    看看现在是不是你要的结果了,顺便问一下,你的校验和算法应该是怎么样的?Dim i As Long
    Dim btss(0 To 3) As Byte
    btss(0) = &HFC
    btss(1) = &H78
    btss(2) = &H23
    'i = btss(0) + btss(1) + btss(2)
    '上面这句还是会出错
    i = CInt(btss(0)) + CInt(btss(1)) + CInt(btss(2))
    Debug.Print Hex(i)                  '16进制和
    btss(3)= CByte(i And &HFF)       'byte型,将16进制和取最后8位