Distinguere ogni byte della rappresentazione esadecimale di un valore decimale
Da Gambas-it.org - Wikipedia.
Ogni valore numerico può essere rappresentato in varie modalità (decimale, esadecimale, ottale, etc). Quando un numero viene salvato in memoria, vengono scritti in ciascuna cella i singoli valori che insieme costituiscono il valore numerico salvato. [nota 1]
Così, se ad esempio il valore decimale iniziale è 123456, i singoli byte della corrispondente sua rappresentazione esadecimale sono 00|01|E2|40:
Indice | singolo byte | |
[0] | <- | 00 |
[1] | <- | 01 |
[2] | <- | E2 |
[3] | <- | 40 |
Per conoscere i singoli byte esadecimali che compongono un numero, è possibile adottare alcune modalità.
Uso della funzione "Shr()"
Public Sub Main() Dim i As Integer ' Il valore decimale usato in questo esempio: i = 123456 Print Hex(Shr(i And &FF000000&, 24), 2);; Print Hex(Shr(i And &FF0000&, 16), 2);; Print Hex(Shr(i And &FF00&, 8), 2);; Print Hex(i And &FF, 2) End
Uso di un Puntatore
Public Sub Main() Dim c, i As Integer Dim p As Pointer ' Il valore decimale usato in questo esempio: i = 123456 p = VarPtr(i) For c = 3 To 0 Step -1 Print Hex(Byte@(p + c), 2);; Next End
Uso di un Vettore
Public Sub Main() Dim i As Integer Dim b As Byte Dim bb As New Byte[] ' Il valore decimale usato in questo esempio: i = 123456 For b = 0 To 3 bb.Push(Byte@(VarPtr(i) + b)) Next ' Verifica il risultato: For c As Short = 3 To 0 Step -1 Print c Print Hex(bb[c], 2)';; Next End
Note
[1] Durante la scrittura del valore in memoria, con riferimento alla quantità di byte comunque da occupare, viene tenuto conto ovviamente anche del "tipo " di valore dichiarato.