Ntohs e htons in c#

giovedì 22 marzo 2012 - 10.39

hydra Profilo | Junior Member

Salve a tutti.
Sto integrando nella mia applicazione un protocollo seriale fornitomi da un'azienda estera. L'azienda mi ha fornito una specifica del protocollo e alcuni esempi di codice in c++. Si tratta di scambiare dei buffer di byte.
Nella specifica del protocollo si dice che tutti i frame sono Big Endian, quindi bisogna usare le funzioni "ntohs" o "htons" per convertire il frame. Ora, in c# non ci sono queste funzioni e cercando in rete un metodo equivalente non ne sono venuto a capo; attualmente utilizzo bitconverter per convertire i frame, ma non sono sicuro che sia la stessa cosa perchè i risultati che ottengo non sono corretti.
Dal codice in c++:

formattazione del dato da inviare:
buffer.val = htons(config->val);
che io ho tradotto in
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

formattazione del dato ricevuto:
config.val = noths(buffer->val);
che io ho tradotto in
lRes[0] = streamReceived[0]; lRes[1] = streamReceived[1]; Test.val = BitConverter.ToUInt16(lRes, 0);

È corretto oppure bitconverter non fa le stesse cose di ntohs e htons? Nel secondo caso, che metodi devo usare?
Vi ringrazio per qualsiasi supporto.

hydra Profilo | Junior Member

Praticamente ho visto che il problema stava da un'altra parte, quindi era giusto.
Aggiungo che htons e ntohs hanno l'equivalente in C# di IPAddress.HostToNetworkOrder e IPAddress.NetworkToHostOrder.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5