|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Aug 2004
Città: Provincia di Monza e Brianza
Messaggi: 6245
|
[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'....
Codice:
ultimo>>>=1; ultimo&=0x7f; ultimo |=0x80; Grazie mille
__________________
AMD Ryzen 5 7600X - Dissipatore Thermalright Assassin King 120SE - RAM Kingston Fury Beast 2x16Gb DDR5 CL30 @ 6000 - Motherboard ASROCK B650 Pro RS - NVME Kingston KC3000 2Tb - PSU FSP Hydro PRO 600w - Win 11 PRO |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
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;
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Oct 2006
Messaggi: 1105
|
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; |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Aug 2004
Città: Provincia di Monza e Brianza
Messaggi: 6245
|
Quote:
Ora dice che: Codice:
ultimo&=0x7f; ----- '&=' : illegal, left operand has type 'unsigned char [1]'
__________________
AMD Ryzen 5 7600X - Dissipatore Thermalright Assassin King 120SE - RAM Kingston Fury Beast 2x16Gb DDR5 CL30 @ 6000 - Motherboard ASROCK B650 Pro RS - NVME Kingston KC3000 2Tb - PSU FSP Hydro PRO 600w - Win 11 PRO |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Devi dichiararlo solo come unsigned char...
unsigned char ultimo; |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Aug 2004
Città: Provincia di Monza e Brianza
Messaggi: 6245
|
Ok, però ora dice
Codice:
ultimo>>>=1; ----- syntax error : '>=' Codice:
char *buf_tot; buf_tot[i]>>>=1; buf_tot[i]&=0x7f; buf_tot[i] |= 0x80;
__________________
AMD Ryzen 5 7600X - Dissipatore Thermalright Assassin King 120SE - RAM Kingston Fury Beast 2x16Gb DDR5 CL30 @ 6000 - Motherboard ASROCK B650 Pro RS - NVME Kingston KC3000 2Tb - PSU FSP Hydro PRO 600w - Win 11 PRO |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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; |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Aug 2004
Città: Provincia di Monza e Brianza
Messaggi: 6245
|
Perfetto, ora mi pare a posto!!!
grazie mille! Siete stati preziosi.
__________________
AMD Ryzen 5 7600X - Dissipatore Thermalright Assassin King 120SE - RAM Kingston Fury Beast 2x16Gb DDR5 CL30 @ 6000 - Motherboard ASROCK B650 Pro RS - NVME Kingston KC3000 2Tb - PSU FSP Hydro PRO 600w - Win 11 PRO |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:11.