Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Valori Byte

Sarà una scemenza ma non ci arrivo 8-( , leggo 2 byte da un file binario e
devo trasformarlo in valore decimale how?
CiaoVB

devo trasformarlo in valore decimale how?
non ho ben chiaro cosa devi fare, ma con la RtlMoveMemory puoi copiarti
i due byte in un Single
ciao, hal


... tenendo conto che il Single e' lungo 4 byte
ciao, hal

 ha scritto nel messaggio
news:998p9i$8mlj$1...@ID-56381.news.dfncis.de...

In un file binary ci sono 4 byte che indicano la dimensione del file devo
saper quanto vale,
li leggo con GET.
Ciao VB


Ancora piu' facile:
Dim numfile As Long, posizione As long, dimFile As Long
numfile = FreeFile()
posizione = <pozione del file da leggere>
'dimFile conterra' il valore cercato
Open strFullPathName For Binary As #numFile
If Not Eof(#numFile) Then
         Get #numfile, posizione, dimFile
End If
ecc. ecc.
dimFile ha il valore gia' pronto.
ciao, hal


Evidentemente non č cosě semplice in quanto cosě facendo ottengo un valore
ben superiore alle dimensioni fisiche del file, la specifica dice (č un
normale file MIDI):
The header for a track is very similar to the one for the file:
4D 54 72 6B xx xx xx xx
As with the header, the first 4 bytes has an ascii equivalent. This one is
MTrk. The 4 bytes after MTrk give the length of the track (not including the
track header) in bytes.
I primi 4 byte li leggo, ma se leggo i 4 successivi in un long ottengo
322321536
mentre il file č in tutto di 16K
Ciao VB

mentre il file č in tutto di 16K
1.
Verifica di essere effettivamente sul byte giusto.
2.
Verifica anche aprendo il file con un editor esadecimale.
3.
Verifica le specifiche del formato del file.
4.
Verifica se il formato del file memorizza la dimensione del file in modo big endian o little endian.
ciao, hal

 Verifica anche aprendo il file con un editor esadecimale.
I 4 byte hanno valore 0,0,0,21 e in effetti dopo 21 byte inizia una nuova
traccia


 > 1.
[...]

 Alfonso
Dunque oggi pomeriggio ho fatto un po' di prove e ci sono riuscito nel
seguente modo:
Function Valore(Valori) As Long
'Valori č una matrice di Byte
    Dim lngCont As Long
    Dim lngValore As Long
    For lngCont = 0 To UBound(Valori)
        lngValore = lngValore + Valori(lngCont) * 256 ^ (UBound(Valori) -
lngCont)
    Next lngCont
    Valore = lngValore
End Function
La domanda č: non c'č un modo piů diretto?
Grazie a tutti per le risposte
Ciao VB

Declare Sub RtlMoveMemory Lib "Kernel32" _
   (dest As Any, src As Any, ByVal cbSize As Long)
Function Valore(ByRef Valori() As Byte, ByVal posizione As Long) As Long
    Dim lngValore As Long
     CopyMemory lngValore, Valori(posizione), Len(lngValore)
      Valore = lngValore
 
End Function
ciao, hal

 ha scritto nel messaggio
news:99bdk8$jqrj$1...@ID-56381.news.dfncis.de...


 ha scritto nel messaggio
news:99bdk8$jqrj$1...@ID-56381.news.dfncis.de...

Funziona, e in effetti ho dovuto invertire l'array come dice Alfonso, questo
però mi riporta alla domanda precedente:
Un modo più diretto? Intendo dire, non dovrebbe essere una cosa inusuale,
quello che voglio fare, quindi pensavo ci fosse un unico comando che legge 4
byte e restituisce il valore.
Comunque grazie a tutti e due.
Ciao VB

Ciao VB
per VB questo e altro :)
ciao, hal