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:

Indicesingolo 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.