Gambas-it

Gambas3 => Programmazione => Topic aperto da: vuott - 17 Aprile 2018, 16:21:01

Titolo: Ottenere un numero dalla sua memorizzazione in formato Big-Endian
Inserito da: vuott - 17 Aprile 2018, 16:21:01
Vorrei ampliare il numero di algoritmi previsti in questa pagina della nostra WIKI:
http://www.gambas-it.org/wiki/index.php?title=Ottenere_un_numero_dalla_sua_memorizzazione_in_formato_Big-Endian

Avete altri suggerimenti, purché siano brevi e non facciano uso di un vettore di tipo Byte[ ] d'appoggio ?
Titolo: Re:Ottenere un numero dalla sua memorizzazione in formato Big-Endian
Inserito da: Top Fuel - 17 Aprile 2018, 23:12:44
La mia versione:

Codice: [Seleziona]
Public Sub Form_Open()
Dim fl As File
Dim i As Integer
Dim a, b As Byte
fl = Open "/percorso/del/file" For Read
For a = 0 To 2
   Read #fl, b
   i += b * 2 ^ (8 * a)
Next
fl.Close
Print i
End
Titolo: Re:Ottenere un numero dalla sua memorizzazione in formato Big-Endian
Inserito da: vuott - 17 Aprile 2018, 23:25:52
La mia versione:

Non va bene: mi restituisce il risultato come fosse in Little-Endian, ossia, riprendendo il valore proposto come esempio nella pagina della wiki, mi dà 328449, e non 66309 !
Titolo: Re:Ottenere un numero dalla sua memorizzazione in formato Big-Endian
Inserito da: Top Fuel - 18 Aprile 2018, 00:03:24
Domani cerco di correggerlo.
Titolo: Re:Ottenere un numero dalla sua memorizzazione in formato Big-Endian
Inserito da: vuott - 18 Aprile 2018, 00:29:06
Domani cerco di correggerlo.

Va bene.
La tua è stata una buona intuizione.
La versione corretta io l'ho già trovata, ma resterò in attesa di te.
Se correggi il codice (e ti dico che sei proprio ad un pelo dalla versione esatta !), lo inserirò nella pagina precisando ovviamente che l'hai proposto tu.

Insomma, avendo memorizzato nel file il solo valore 66309 (che in esadecimale è &h010305), alla fine del codice ponendo questa riga:
Codice: [Seleziona]
Print i, Hex(i, 6)
devi ottenere questi risultati (in rappresentazioni decimale ed esadecimale):
66309   010305
Titolo: Re:Ottenere un numero dalla sua memorizzazione in formato Big-Endian
Inserito da: Top Fuel - 20 Aprile 2018, 11:41:21
Così forse?
La butto li che ora non ho tempo di testare.

Codice: [Seleziona]
Public Sub Form_Open()
Dim fl As File
Dim i As Integer
Dim a, b As Byte
fl = Open "/percorso/del/file" For Read
For a = 0 To 2
   Read #fl, b
   i += b * 2 ^ (8 * (2- a))
Next
fl.Close
Print i
End
Titolo: Re:Ottenere un numero dalla sua memorizzazione in formato Big-Endian
Inserito da: vuott - 20 Aprile 2018, 12:10:30
Così forse?
Va bene, bravo: hai risolto.
Metterò il tuo codice in wiki con citazione " magna cum laude " ! 


Avresti potuto fare anche così:
Codice: [Seleziona]
Public Sub Main()
 
  Dim fl As File
  Dim i As Integer
  Dim b As Byte
  Dim c As Short

   fl = Open "/percorso/del/file" For Read

   For c = 2 To 0 Step -1
     Read #fl, b
     i += b * 2 ^ (8 * c)
   Next

   fl.Close

   Print i, Hex(i, 6)

End
Titolo: Re:Ottenere un numero dalla sua memorizzazione in formato Big-Endian
Inserito da: Top Fuel - 20 Aprile 2018, 21:21:42
Va bene, bravo: hai risolto.
Metterò il tuo codice in wiki con citazione " magna cum laude " ! 

Yuppi, se magna! Dove si va? ;D