View Full Version : [C] Spostamento di Byte
Ciao, vi chiedo un aiuto....non conosco troppo bene il C, purtroppo, e mi trovo tra le mani questo codice Java da 'tradurre'....
ultimo>>>=1;
ultimo&=0x7f;
ultimo |=0x80;
Dovrebbe essere uno shift di byte...."ultimo" l'ho dichiarata char , perchè il byte di java non c'è, ma ora mi dà un errore di sintassi su quegli operatori....cosa devo scrivere ?
Grazie mille
ultimo>>>=1;
ultimo&=0x7f;
ultimo |=0x80;L'operatore >>> è caratteristico di Java e consente di fare uno shift a destra con "zero-extension", cioè uno '0' viene sempre inserito a sinistra.
In "C" non c'è uno shift del genere, solo quello "tradizionale" >> che però fa il sign extension (e dal momento che un char tipicamente è con segno, non fa quello che il codice sopra vorrebbe).
Quindi:
a) dichiari ultimo come unsigned char
b) fai:
ultimo >>= 1;
ultimo &= 0x7f;
ultimo |= 0x80;
mad_hhatter
08-06-2007, 12:20
certo che in java esiste il tipo byte!!
questo codice compila benissimo:
byte ultimo = (byte) 0xFF;
//shift a dx di 1 BIT con inserimento di bit a 0 nelle posizioni più significative
ultimo>>>=1;
ultimo&=0x7f;
ultimo |=0x80;
certo che in java esiste il tipo byte!!
questo codice compila benissimo:
byte ultimo = (byte) 0xFF;
//shift a dx di 1 BIT con inserimento di bit a 0 nelle posizioni più significative
ultimo>>>=1;
ultimo&=0x7f;
ultimo |=0x80;
Intendevo che IN C , il Byte di Java non c'è....
Ora dice che:
ultimo&=0x7f; ----- '&=' : illegal, left operand has type 'unsigned char [1]'
idem per le altre righe.
Devi dichiararlo solo come unsigned char...
unsigned char ultimo;
Ok, però ora dice
ultimo>>>=1; ----- syntax error : '>='
e poi ho lo stesso problema con una array di char:
char *buf_tot;
buf_tot[i]>>>=1;
buf_tot[i]&=0x7f;
buf_tot[i] |= 0x80;
Non esiste l'operatore >>> in C. Devi usare >> accompagnato da unsigned char...
unsigned char *buf_tot;
buf_tot[i] >>= 1;
buf_tot[i] &= 0x7f;
buf_tot[i] |= 0x80;
Perfetto, ora mi pare a posto!!!
grazie mille!
Siete stati preziosi.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.