|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: May 2003
Città: Salernitano A Torino
Messaggi: 189
|
[C] Conversione da intero a char... come fare??
Salve.
Avrei la necessità di convertire un numero intero a 16 bit in modo che possa essere trasferito su socket rappresentato in binario puro su 2 byte. il numero deve essere prima convertito in formato di rete con la funzione htons. Ma è proprio il passaggio da formato di rete a binario su 2 byte (e viceversa) che mi manca... Qualcuno può aiutarmi pls. Grazie in anticipo per capirci: Codice:
int a,b; char buf[4] a=10; b=20; uint16_t numero1=htons(a); uint16_t numero2=htons(b); // ora devo mettere in buf[1] e buf[2] numero1 ed // in buf[3] e buf[4] numero2 // il tutto verra trasmesso via socket e lato server dovrei // fare l'operzione inversa... ma come??? ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Non so se ho ben capito. Prova così:
Codice:
buf[0] = (numero1 & 0xFF); buf[1] = (numero1 & 0xFF00); buf[2] = (numero2 & 0xFF); buf[3] = (numero2 & 0xFF00);
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
Per trasmettere poi. una volta che hai il fd del socket puoi suare write (fd_socket, &a, sizeof(int)); ciao ![]() |
|
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: May 2003
Città: Salernitano A Torino
Messaggi: 189
|
x DanieleC88:
Grazie della dritta, proverò... il fatto degli array lo so e che nella fretta di riscrivere il codice ho scritto fischio per fiasco... ![]() mod: forse ho trovato un'altra soluzione... che te ne pare: Codice:
memcpy(&buf[0],&numero1,2); memcpy(&buf[2],&numero2,2); Purtroppo devo farla per forza la conversione per renderlo compatibile con tutte le architetture, sia big-endian che little-endian... in caso contrario non servirebbe. Grazie cmq Ultima modifica di Neo1982 : 01-07-2005 alle 23:03. |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Si ma se sei te a decidere come posizioni i byte nella stringa (visto che metti il tutto nel buffer) non serve a niente...
Allora...SENZA usare htons: unsigned short x; buf[1] = (numero1 && 0xFF00) >> 8; buf[2] = numero1 && 0x00FF; buf[3] = (numero2 && 0xFF00) >> 8; buf[4] = numero2 && 0x00FF; Per riprendere i numeri: unsigned short numero1 = (unsigned)buf[2] + ((unsigned)buf[1] << 8); unsigned short numero2 = (unsigned)buf[4] + ((unsigned)buf[3] << 8); E questo è comunque indipendente dal formato di memorizzazione... |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:12.