Newsgroup: it.comp.lang.visual-basic
Titolo: Codifica e decodifica little e big endian

Qualcuno ha delle routine in Vb che trasformano un numeri in little endian e
viceversa e fanno la stessa cosa con il big endian? Io queste routine le
ho...però sono una conversione dal Qbasic non mi sembrano proprio efficienti
e affidabili.
Gianni Moretti

 ha scritto nel messaggio
news:98fdu2$1n18u$1...@ID-77941.news.dfncis.de...

In rete viaggiano sempre i dati in formato little ending (come trattano i
dati i processori Motolola),
quindi puoi usare le API che vengono fornite dalla dll delle socket.
Usa queste API:
    Declare Function htonl Lib "ws2_32.dll" (ByVal hostLong As Long) As Long
    Declare Function htons Lib "ws2_32.dll" (ByVal hostLong As Integer) As
Integer
    Declare Function ntohl Lib "ws2_32.dll" (ByVal hostLong As Long) As Long
    Declare Function ntohs Lib "ws2_32.dll" (ByVal hostLong As Integer) As
Integer
Supponendo che il dato sia LONG in memoria verrebbe memorizzato nei seguenti
questi 2 modi a seconda che sia il stile RETE o in stile HOST:
mentre il formato Host per i processori INTEL è il seguente
        Indirizzo di memoria / Tipo Byte (bits)
        01 / dd  (bit dal 0 al 7)
        02 / cc  (bit dal 8 al 15)
        03 / bb  (bit dal 16 al 23)
        04 / aa  (bit dal 24 al 31)
Il formato RETE è il seguente:
        Indirizzo di memoria / Tipo Byte (bits)
        01 / aa  (bit dal 24 al 31)
        02 / bb  (bit dal 16 al 23)
        03 / cc  (bit dal 8 al 15)
        04 / dd  (bit dal 0 al 7)
Dove
    aa = Byte alto della word alta (bit dal 24 al 31)
    bb = Byte basso della word alta (bit dal 16 al 23)
    cc = Byte alto della word bassa (bit dal 8 al 15)
    dd = Byte alto della word bassa (bit dal 0 al 7)
htonl() = Converte una Long da HOST a RETE
htons() =  Converte un Integer da HOST a RETE
ntohl() =  Converte una Long da RETE a HOST
ntohs() =  Converte un Integer da RETE a HOST
di fatto htonl() è uguale a ntohl() e ntohl() è uguale a ntohs(), in quanto
comunque vengono invertiti bytes.
/\/\/\/\/\/\/\/\/\/\/\/\/
|  Qui sul NG è nata una iniziativa:
|  Partecipa alla stesura di progetti VB sviluppati in team,
|  informati sul Sito Comune sezione Leonardo. Io
|  partecipo al progetto Data Raptor, alleati con noi.
\/\/\/\/\/\/\/\/\/\/\/\/\
Ciao
Ettore Maronese, il Mes
http://www.maronese.com/mes
Sito Comune di questo NG
http://www.murialdo.it/it_lang_vb

 quindi puoi usare le API che vengono fornite dalla dll delle socket.
Bella pensata!
Aggiungo solo una nota di colore, Big Endian e Little Endian sono tratti da
"I Viaggi di Gulliver" di Swift. A Lilliput si svolge infatti una guerra tra
quelli che rompono le uova dalla parte piccola (little endian) e quelli che
le rompono dalla parte grande (big endian). Swift usava questa metafora per
spiegare la futilitą delle motivazioni che spingono alla guerra, e la stessa
futilitą sta alla base della differenza di rappresentazione dei dati tra
Motorola e Intel.
Ciao
*Roby*

 Motorola e Intel.
Già, entrambi infatti non vengono limitati dalla scelta sbagliata, sono
entrambe
valide e funzionali. eppure c'e' ancora chi pensa il contrario.
Basti pensare che allo stadio si uccidono a vicenda perchè... . perchè.. .
per il colore della maglia?  ;-(
