Newsgroup: it.comp.lang.visual-basic
Titolo: Leggere file binario e trasformarlo in hex

Ciao a tutti,
leggo un file binario con la funzione (presa da internet):
Dim a() As Byte
a() = ReadBinaryFile("prova")'chiamo la funzione di lettura
Private Function ReadBinaryFile(ByVal Filename As String) As String
    Dim FileNo As Integer, FileSize As Long
    Dim i As Long, Loops As Long, Remainder As Long
    Dim Buffer As String 
    Dim BinaryData As String
    Const BUFFER_SIZE As Integer = 1
    FileNo = FreeFile
 
'Open Filename For Binary Access Read Shared As #FileNo
Open Filename For Binary As #FileNo
        FileSize = LOF(FileNo)  ' get the file size
ReDim a(1 To FileSize)
        Loops = Int(FileSize / BUFFER_SIZE)  ' calculate number of loops
required
        For i = 1 To Loops
    Buffer = String$(BUFFER_SIZE, Chr(0))
            Get #FileNo, , Buffer
 
        BinaryData = BinaryData & Buffer
 
        Next
        ' fill in the leftovers
        '
        Remainder = FileSize Mod BUFFER_SIZE
        If Remainder > 0 Then
  Buffer = String$(Remainder, Chr(0))
            Get #FileNo, , Buffer
 
             BinaryData = BinaryData & Buffer
        End If
        ReadBinaryFile = BinaryData
    Close #FileNo
 
End Function
fin qui tutto bene, poi con HEX converto in esadecimale:
For x = LBound(a()) To UBound(a())
risposta = risposta & Hex(a(x))
Next x
Text1 = LCase(risposta)
ottengo un risultato errato:
10901020304050605080302000000010100020907060001090aa0aa03202300010206110000000000000000000000000000000000000000000000000000a02030d307d0a8000003e07e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0501030d307d0a80004000000050000000200000f0a2030790450202000905065000000000000000000000000000000000000000000000000000000000000000a0507030d307d0a8000400000f0a2030790450202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0504030d307d0a90005000000050000000200000f0a203079045020200090000000000000000000000000000000000000000000000000000000000000000000a0
invece di:
01090102030405060508030200000001010002090706000109aaaa32230001029a00000000000000000000000000000000000000000000000000000a0203d37da800003e7e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a050103d37da80004000000050000000200000fa20379458600090565000000000000000000000000000000000000000000000000000000000000000a050703d37da8000400000fa203794586000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a050403d37da90005000000050000000200000fa20379458600090000000000000000000000000000000000000000000000000000000000000000000a
chiedo scusa per la lunghezza del post.
Grazie 
ago
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 a() = ReadBinaryFile("prova")'chiamo la funzione di lettura
Ma dove hai trovato 'sta roba?
Fai una
Dim b As Byte()
Redim b(0 To LOF(#FileNo))
Get FileNo, , b
E hai i tuoi byte.
Poi, cosa vuoi ottenere da questo lo sai solo tu :)
Ciao 

 Ciao
Grazie per l'immediatezza,
ho applicato il codice ed il risultato č:
1912345658320001102976019aaaa32230129a0000000000
mentre dovrebbe uscie la stringa:
010901020304050605080302000000010100020907060001 (questa stringa mi č
stata consegnata per il test)
con la procedura precedente eseguiva correttamente i primi 50 car. poi
sballava...
mi serve per decodificare un file binario da cui ricavare una base dati
per un progetto...
grazie


 sballava...
sembrerebbe un 'problema' della Hex$()
mancano infatti tutti gli "0" non significativi
a memoria hex$(1) e' "1" quando invece tu vorresti avere "01"
devi paddare a sinistra la stringa ottenuta con degli "0"
prova ad usare la seguente funzione :
Public Function Hex2(ByVal x As Integer) As String
     hex2 = Right("00" & Hex(x), 2)
End Function


 mancano infatti tutti gli "0" non significativi
E' quello che pensavo anch'io, ma dovrebbe essere lui a saperlo!
Dire che la funzione restituisce la stringa errata non ha senso, altrimenti 
la soluzione sarebbe far restituire direttamente la stringa corretta senza 
inutili calcoli ;)
Per ottenere un risultato bisognerebbe per lo meno sapere cosa si vuole 
ottenere.
Ciao 

ho risolto,
grazie per le dritte 
