Differenze tra le versioni di "Distinguere ogni byte della rappresentazione esadecimale di un valore decimale"

Da Gambas-it.org - Wikipedia.
 
(Una versione intermedia di uno stesso utente non è mostrata)
Riga 1: Riga 1:
Il caso è quello in cui si intende inserire in un vettore di tipo Byte[] i singoli byte che compongono la rappresentazione esadecimale di un valore inizialmente dichiarato decimale.
+
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. <SUP>&#091;[[#Note|Nota 1]]&#093;</sup>
  
Più in particolare, se ad esempio il valore decimale iniziale è ''123456'', si inseriranno in ciascun elemento del vettore di tipo Byte[] i byte della corrispondente sua rappresentazione esadecimale ''0001E240'':
+
Così, se ad esempio il valore decimale iniziale è ''123456'', i singoli byte della corrispondente sua rappresentazione esadecimale sono ''00|01|E2|40'':
 
<TABLE>
 
<TABLE>
<TR><TD align=center>Indice vett.</td><TD align=center></td><TD align=center>singolo byte</td></tr>
+
<TR><TD align=center>Indice</td><TD align=center></td><TD align=center>singolo byte</td></tr>
 
<TR><TD align=center>[0]</td><TD align=center> <- </td><TD align=center>00</td></tr>
 
<TR><TD align=center>[0]</td><TD align=center> <- </td><TD align=center>00</td></tr>
 
<TR><TD align=center>[1]</td><TD align=center> <- </td><TD align=center>01</td></tr>
 
<TR><TD align=center>[1]</td><TD align=center> <- </td><TD align=center>01</td></tr>
Riga 11: Riga 11:
  
  
Di seguito un possibile codice:
+
Per conoscere i singoli byte esadecimali che compongono un numero, è possibile adottare alcune modalità.
 +
 
 +
===Uso della funzione ''Shr( )''===
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
   
 
   
 
   Dim i As Integer
 
   Dim i As Integer
  Dim bb As New Byte[]
+
   
  Dim j As Byte
+
  i = 123456
 
+
  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)
 
   
 
   
  bb.Add(i And &FF)
+
'''End'''
  bb.Add(Shr(i And &FF00&, 8))
+
 
  bb.Add(Shr(i And &FF0000&, 16))
+
 
  bb.Add(Shr(i And &FF000000&, 24))
+
===Uso di un Puntatore===
 +
'''Public''' Sub Main()
 
    
 
    
 +
  Dim c, i As Integer
 +
  Dim p As Pointer
 
    
 
    
  Print "Ordine dei Byte 'little-endian':"
+
  i = 123456
  For j = 0 To bb.Max
+
      
     Print Hex(bb[j], 2);
+
  p = VarPtr(i)
  Next
+
   
 
+
  For c = 3 To 0 Step -1
 
+
    Print Hex(Byte@(p + c), 2);;
  bb = bb.Reverse()
+
  Next
 
+
 
  Print "\n\nOrdine dei Byte 'big-endian':"
 
  For j = 0 To bb.Max
 
    Print Hex(bb[j], 2);
 
  Next
 
 
 
  '''End'''
 
  '''End'''
 +
 +
 +
 +
 +
----
 +
=Note=
 +
[1]  Durante la scrittura del valore in memoria, con riferimento alla quantità di byte comunqueda occupare, viene tenuto conto ovviamente anche del "''tipo''" di valore dichiarato.

Versione attuale delle 03:03, 30 mag 2017

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
   
  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
 
  i = 123456
   
  p = VarPtr(i)
   
  For c = 3 To 0 Step -1
    Print Hex(Byte@(p + c), 2);;
  Next
  
End




Note

[1] Durante la scrittura del valore in memoria, con riferimento alla quantità di byte comunqueda occupare, viene tenuto conto ovviamente anche del "tipo" di valore dichiarato.