我的程序这样写的.
dim a as Integer
Open App.Path & "\temp\fs" For Binary As #1
  For i = 65 To 866944 Step 168
      Get #1, i, kkk 
      Set itmX = LVw2.ListItems.Add(, , kkk)                            
  Next
         
close 读出来的数据有正也有负数.但是我看原始文件的16进制应该都是正的.比如原始文件的16进制是60 91  我读出来就是个负数.用计算机转确是正的.不知道程序出错再哪?请教                               

解决方案 »

  1.   

    kkk 换成 a 吧
    你kkk定义在哪里?
      

  2.   


    Open App.Path & "\temp\fs " For Binary As #1
        Get #1, i, kkk   
    Close #1你需定义kkk为Byte数据类型,属8 位(1个字节)的数值形式,范围在 0 至 255 之间。而你想获得的16位(2 个字节)的数值形式,其范围为 -32,768 到 32,767 之间。
    其中想获得32768 到 65535数值,要采用特殊转换方法。Private Sub Command1_Click()
         Print &H6091
         Print Hex(65535)
         Print &HFFFF '显示-1
         Print &HFFFF& '显示65535
         Print &HF123 '显示-3805
         Print &HF123& '显示61731
    End Sub在你获得单字节数据流后,赋值给String变量,用MID函数按要求取2字节(16进制例:6091)后按上述代码实例转换。
    数据类型定义:
    Integer 数据类型
    Integer 变量存储为 16位(2 个字节)的数值形式,其范围为 -32,768 到 32,767 之间。
    Byte 数据类型
    Byte 变量存储为单精度型、无符号整型、8 位(1个字节)的数值形式,范围在 0 至 255 之间。
      

  3.   

    下面提供一段代码用于以二进制方式读取文件,提醒一点二进制方式读取文件只能一个一个字节的读。Option Explicit
        Dim a As Byte
        Dim aa As String
        Dim bb As String
        Dim i As Integer
        Dim nw As Long
    Private Sub Command1_Click()
        CommonDialog1.ShowOpen
    End Sub
    Private Sub Command4_Click()
        Cls
        Text2 = ""
        bb = ""
        Open CommonDialog1.FileName For Binary As #1
        For i = 1 + nw To 512 + nw
        nw = Seek(1)
            Get #1, i, a
            Text1 = a
                Text1 = a
                aa = Right$(Hex(a), 2)
                If Len(aa) = 1 Then
                aa = "0" & aa
                End If
                bb = bb & aa & " "
                
                RichTextBox1 = bb
            If i Mod 16 = 0 Then
                Print aa
                Text2 = Text2 & aa
            Else
                Print aa; " ";
                Text2 = Text2 & aa & " "
            End If
            Text1 = nw
        Next
        Close #1
    End Sub1
      

  4.   

    我写错了.应该是kkk不是a为什么long类型就读取正确.整型就出现负数.文件的读取应该不存在这个问题吧
      

  5.   

    TO iori8421
    为什么long类型就读取正确.整型就出现负数. 
    ....
    你的问题是VB在使用Hex和Val函数处理进制转换,需特别注意整数和长整数之间的不同: 
    整数用2字节存储数据,而长整数用4字节存储数据.VB的整数所能表示的数值范围在-32768到32767之间. 
    此时使用Hex和Val函数处理进制转换不存在异议. 
    Private   Sub   Command1_Click() 
            Dim   a   As   Integer 
            a   =   -12325 
            Text1   =   Hex(a)   'Text1中显示CFDB 
            Text2   =   Val(&HCFDB)   'Text2中显示-12325 
    End   Sub 当数值大于32767小于65536,必须注意转换的正确性,由16进制转换为10进制时,需在16进制字符串后加 "& ". 
    Private   Sub   Command1_Click() 
            Dim   a   As   Long 
            a   =   53211 
            Text1   =   Hex(a)   'Text1中显示CFDB 
            Text2   =   Val(&HCFDB&)   'Text2中显示53211 
    End   Sub 
     
     
     
      

  6.   

    long 是 4位的 符号位在第4个字节的最高位
    integer是2位 符号位在第2个字节的最高位