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 14:53 di Vuott (Discussione | contributi)

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

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



Riferimenti