请问各位,我从一个(不知道存储结构)二进制文件中读出数据后,如何转换成可理解的数据。
二进制文件内容如下,已知:存储数据是点的坐标,一个数值如235。
我根据它的二进制内容(如下)推测一个点是用四个字节存储,但是不知道为什么,所有后两个字节是0。从一个点变到另外一个点,如从00 51到FF 50 只是头两个字节在变,请问高人,这是怎么回事,如何读出这个点是多少??谢谢,高分。
2D 51 00 00
27 51 00 00 
1A 51 00 00 
10 51 00 00 
03 51 00 00 
01 51 00 00 
00 51 00 00 
FF 50 00 00 
FA 50 00 00 
F9 50 00 00 
E8 50 00 00 
E3 50 00 00 
E0 50 00 00 

解决方案 »

  1.   

    按16进制来理解,单由前两个字节可组成16位二进制数据,在-32768到32767间.
    你可用 &H0051或
           VAL("&H" & "0051")
    求的其10进制的数值.
    至于后两字节为何是00 00
    这或许是两维坐标,其X或Y轴的值为0.
      

  2.   

    zdingyun:非常感谢您的回复,问题解决一定给高分。
    我试一下,但是“你可用 &H0051或  VAL("&H" & "0051") 求的其10进制的数值. ”,不太明白,能否告诉我具体如何实现。根据此文件数据的实际应用,可以知道点是在-50到300之间波动,即可能是点,211.45,具体小数位是多少我也不知道,只知道肯定是所有点有固定的小数位数。也可能是把211.45换成整数21145来存储。谢谢
      

  3.   

    你的数据应该是低位在前高位在后
    即你的第一行数就是:&H2D+&H5100
    或者 直接 &H512D
    十进制就是 20781
      

  4.   

    Option Explicit
        Dim sj As Integer
        Dim sj1 As Integer
    Private Sub Command1_Click()
        sj = &H51
        Text1 = sj
        sj1 = Val("&H" & "0051")
        Text2 = sj1
    End SubPrivate Sub Command2_Click()
        sj = &H2D51
        Text1 = sj
        sj1 = Val("&H" & "2D51")
        Text2 = sj1
    End Sub
    3楼的低位在前高位在后,需依据数据组成的约定而定。小数点位数还的根据数据结构而定,你需对全部数据分析来判断。
      

  5.   

    需要有与文件对应的坐标值列表才行。假定存放次序为 2 字节 x、2 字节 y
    Option ExplicitType Point
        x As Integer
        y As Integer
    End TypeSub Main()
        Dim hFile           As Integer
        Dim p               As Point
        
        Debug.Assert Len(p) = 4
        
        hFile = FreeFile
        Open "C:\Temp\1.dat" For Random Access Read As #hFile Len = Len(p)
        While Not EOF(hFile)
            Get #hFile, , p
            Debug.Print HexMem2(p.x) & HexMem2(p.y), p.x / 100, p.y / 100
        Wend
        Close #hFile
    End SubFunction HexMem2(ByVal v As Integer) As String
        HexMem2 = Right$("0" & Hex(v And &HFF), 2) & " " & _
                  Right$("0" & Hex((v And &HFF00) \ &H100), 2) & " "
    End Function
      

  6.   

    没有文件结构,如果对方才有的都是ASCII写入的话,你能直接得到又意义的信息如果按BYTE方式写的话,你基本就是没有戏!给你4字节,你知道这是2个汉字还是4ge数字,还是一个LONG类型?
      

  7.   

    谢谢各位的回复!
    仅仅是数字,不是汉字或其它符号。我推测两个字节表示一个数值。
    zdingyun 的方法我试了,但是和实际应用中的数值差的太远,(如2.678E-41),我试试ayalicer 和Tiger_Zhao的方法。 
      

  8.   

    这些数据应该是低位字节在前。十六进制        十进制  假定两位小数
    2D 51 00 00 = 20781->207.81
    27 51 00 00 = 20775->207.75
    1A 51 00 00 = 20762->207.62
    10 51 00 00 = 20752->207.52
    03 51 00 00 = 20739->207.39
    01 51 00 00 = 20737->207.37
    00 51 00 00 = 20736->207.36
    FF 50 00 00 = 20735->207.35
    FA 50 00 00 = 20730->207.30
    F9 50 00 00 = 20729->207.29 
    E8 50 00 00 = 20712->207.12
    E3 50 00 00 = 20707->207.07 
    E0 50 00 00 = 20704->207.04