Differenze tra le versioni di "Invertire l'ordine nelle coppie di byte dell'area di memoria di un vettore con la funzione esterna swab()"
Da Gambas-it.org - Wikipedia.
(Una versione intermedia di uno stesso utente non è mostrata) | |||
Riga 12: | Riga 12: | ||
− | + | Public Sub Main() | |
Dim b As Byte | Dim b As Byte | ||
Riga 18: | Riga 18: | ||
Dim bb2 As New Byte[10] | Dim bb2 As New Byte[10] | ||
− | + | bb1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] | |
− | <FONT Color=gray>' ''Invertiamo la posizione di ciascun blocco di due dati adiacenti all'interno dell'area di | + | <FONT Color=gray>' ''Invertiamo la posizione di ciascun blocco di due dati adiacenti all'interno dell'area di memoria del vettore:''</font> |
− | + | swab(bb1.Data, bb2.Data, 10) | |
− | + | For Each b In bb2 | |
− | + | Print b, | |
− | + | Next | |
− | + | End | |
− | |||
Versione attuale delle 03:19, 10 giu 2024
La funzione esterna swab( ), dichiarata nel file header /usr/include/unistd.h, copia un'area di memoria in un'altra, invertendo però la posizione dei dati in ciascuna coppia di byte adiacenti presenti nell'area medesima. Il blocco di dati coinvolto, dunque, è composto da 2 byte (16 bit).
E' necessario richiamare in Gambas la libreria dinamica condivisa: "libc.so.6"
Mostriamo un semplice esempio pratico:
Library "libc:6" ' void swab (const void *__restrict __from, void *__restrict __to, ssize_t __n) ' Swab pairs bytes in the first N bytes of the area pointed to by FROM and copy the result to TO. Private Extern swab(__from As Pointer, __to As Pointer, __n As Long) Public Sub Main() Dim b As Byte Dim bb1 As Byte[] Dim bb2 As New Byte[10] bb1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] ' Invertiamo la posizione di ciascun blocco di due dati adiacenti all'interno dell'area di memoria del vettore: swab(bb1.Data, bb2.Data, 10) For Each b In bb2 Print b, Next End