Distinguere ogni byte della rappresentazione esadecimale di un valore decimale

Da Gambas-it.org - Wikipedia.
Vai alla navigazione Vai alla ricerca

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.