我的程序这样写的.
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 我读出来就是个负数.用计算机转确是正的.不知道程序出错再哪?请教
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 我读出来就是个负数.用计算机转确是正的.不知道程序出错再哪?请教
你kkk定义在哪里?
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 之间。
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
为什么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
integer是2位 符号位在第2个字节的最高位