我读一个二进制文件,需要从第241个字节开始读,每40个字节为一行。但我只需要这40个字节的前4个字节,每2个字节为一个数字。但溢出,溢出时I=840。是怎么回事呢。Dim wd() As Integer, jd() As Integer
  
'读二进制文件读出经纬度,时间等
N = FreeFile
Open FILEN For Binary As #N
Num = (LOF(N) - 240) / 40
    ReDim jd(Num)
    ReDim wd(Num)
    For I = 1 To Num
    Get #N, 241 + (I - 1) * 40, wd(I)
    Get #N, , jd(I)
    Next I
Close #N可我如果直接从(840-1)*40+241=33801读,却不会跳溢出,甚至比它大很多也不溢出我是这样写的dim wd as integeropen filen for binary as #1get #1,33801,wdget #1,,jdclose #1

解决方案 »

  1.   

    溢出多半是数据类型选错了 你把你的integer 换成 long  整数我记得最大好像是32000多 具体记不清了 你去查查
      

  2.   

    自己算算N = FreeFile
    Open FILEN For Binary As #N
    Num = (LOF(N) - 240) / 40    '你的Num表示了你要读的次数(行数)
      ReDim jd(Num)              '你后面将每次读Num个字节
      ReDim wd(Num)
      For I = 1 To Num
      Get #N, 241 + (I - 1) * 40, wd(I)   '读了Num个字节
      Get #N, , jd(I)                     '再读Num个字节,加上上面的读了2*Num个字节
      Next I                              '你循环了Num次
    Close #N                              '你将要读2*Num*Num个字节,2*Num*Num=Num*40+240?
      

  3.   

    对于中间结果寄存,VB 缺省是按 Integer 处理的,范围是 -32768 至 32767。Dim p As Long  For I = 1 To Num
      p = I - 1
      p = 241 + p * 40 
      Get #N, p, wd(I)
      Get #N, , jd(I)
      Next I还有一种方法:
    Dim tmp(19) As IntegerOpen FILEN For Binary As #N
    Num = (LOF(N) - 240) / 40
    ReDim jd(Num)
    ReDim wd(Num)Seek #N, 241Do Until EOF(N)
        Get #N, , tmp
        wd(I) = tmp(0)
        jd(I) = tmp(1)
        I = I + 1
    Loop