Invertire l'ordine nelle coppie di byte dell'area di memoria di un vettore con la funzione esterna swab()
Da Gambas-it.org - Wikipedia.
Versione del 18 lug 2016 alle 13:53 di Vuott (Discussione | contributi)
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