Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura
Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura
Il primo Micro RGB di Samsung per il salotto è il 65 pollici da 2.749 euro. Sul banco di misura abbiamo rilevato 2.000 nit di picco, nero assoluto con il local dimming e il 91,4% del BT.2020, il colore più ampio che abbiamo misurato su un LCD
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
Apple ha rinnovato iPhone 18 Pro soprattutto dentro: chip A20 Pro a 2 nm con memoria affiancata al SoC, camera di vapore tre volte più ampia, Dynamic Island più piccola del 25% grazie a Face ID sotto il display e fotocamera principale con diaframma variabile da f/1.48 a f/4. Lo abbiamo misurato al colorimetro e nei benchmark, usato con iOS 27 e messo alla prova in fotografia tra laghi, borghi e interni poco illuminati
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
A Londra, per il trentennale dei Toughbook, Panasonic ha presentato il tablet G3 e il 2-in-1 34. Con Jon Tucker, a capo dell'ingegneria europea, abbiamo parlato di ciò che non si vede: batterie, antenne, porte seriali e accorgimenti nati sul campo
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-12-2008, 17:23   #1
Francuz84
Junior Member
 
Iscritto dal: Sep 2008
Messaggi: 1
[C] Estrazione del byte più significativo da dati ricevuti da un apparecchio

Ciao a tutti ragazzi sto imparando ad usare il C man mano che vado avanti con un corso in università. Ho realizzato un programma in C che permmette ad un PC host di interfacciarsi con uno strumento, pilotarlo ed estrarre i dati di mio interesse.

Riguardo un dato da estrarre, ho bisogno di prelevare il byte più significativo da una word di 16 bit.

Il dato che ricevo dallo strumento è un INT16U di nome rssi;
il byte più significativo che estraggo è di tipo int a cui ho assegnato il nome rssi1;
per ottenere l'informazione di cui ho bisogno eseguo la seguente operazione:

rssi1 = rssi/256;

credete che sia un operazione valida? In caso contrario come mi consigliate di procedere?

Grazie per l'attenzione
Francesco
Francuz84 è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2008, 17:28   #2
vizzz
Senior Member
 
L'Avatar di vizzz
 
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
l'operazione corretta per quello che vuoi fare è lo "shift"
se:
Codice:
int16U rssi;
int8U rss1 = (rssi >> 8) & 0xFF
__________________
ho concluso con: kvegeta, doctordb, Leland Gaunt.
vizzz è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2008, 22:33   #3
Kenger
Member
 
Iscritto dal: Aug 2005
Messaggi: 168
Quote:
Originariamente inviato da vizzz Guarda i messaggi
l'operazione corretta per quello che vuoi fare è lo "shift"
se:
Codice:
int16U rssi;
int8U rss1 = (rssi >> 8) & 0xFF
Non ho capito perchè fai un AND tra un valore a 16 bit e 8 1.
Il padding dello shift non è a 0 in automatico?
Kenger è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2008, 04:08   #4
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
In realtà in quel caso non credo serva nemmeno più l'and, ma, ad ogni modo, dipende dalla tua CPU (è big endian o little endian?); può bastarti un and o essere necessario lo shift, te la dovresti comunque cavare con poco.

Alternativamente puoi ricorrere ad una soluzione di questo tipo:
Codice:
int16_t word = /* valore originario */;
int8_t *ptr = (int8_t *) &word;

return ptr[0]; /* l'indice dipende dall'endianness */
ciao
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2008, 09:21   #5
!fazz
Moderatore
 
L'Avatar di !fazz
 
Iscritto dal: Nov 2006
Messaggi: 22275
se la tua word a 16 bit è un valore intero io andrei di cast esplicito a tipo carattere (8 bit) se la cella contenente l'msb è la prima delle 2 sei apposto altrimenti un +1 ad un puntatore a carattere.


(almeno così mi pare che dovrebbe funzionare il c nn lo uso da parecchio)
__________________
"WS" (p280,cx750m,4790k+212evo,z97pro,4x8GB ddr3 1600c11,GTX760-DC2OC,MZ-7TE500, WD20EFRX)
Desktop (three hundred,650gq,3800x+nh-u14s ,x570 arous elite,2x16GB ddr4 3200c16, rx5600xt pulse P5 1TB)+NB: Lenovo p53 i7-9750H,64GB DDR4,2x1TB SSD, T1000
!fazz è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2008, 13:42   #6
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Kenger Guarda i messaggi
Non ho capito perchè fai un AND tra un valore a 16 bit e 8 1.
Il padding dello shift non è a 0 in automatico?
No, non lo e'. In automatico c'e' l'estensione del segno, quindi per sicurezza vizzz ha messo l'AND
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2008, 15:43   #7
Kenger
Member
 
Iscritto dal: Aug 2005
Messaggi: 168
Quote:
Originariamente inviato da sottovento Guarda i messaggi
No, non lo e'. In automatico c'e' l'estensione del segno, quindi per sicurezza vizzz ha messo l'AND
Ah, OK. Grazie
Kenger è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2008, 21:18   #8
stefano_ba
Senior Member
 
L'Avatar di stefano_ba
 
Iscritto dal: Mar 2000
Città: Bari-Brindisi-Lecce e prov
Messaggi: 424
In questi casi il metodo generale e' quello di fare un and tra il dato ed una maschera composta da 1 nei bit che mi interessano e 0 nelle altre posizioni.
Successivamente si effettuano degli shift per spostare i bit nelle posizioni che interessano.
__________________
VoIp Gratis - Adsl senza canone telecom
Ho trattato con: adarkar,Bobosassa, matrix866,M@t,k|o, percky,s5otto, Rospaccio, CluRaCaN, Igor,Zizziry, bokkakesballa, Pex,freewilly, Umbyboy,DAVO, nathbigga, fabiuxx ed altri. Diffidate di quinnuxxa
stefano_ba è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2008, 22:37   #9
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Anche senza AND sarebbe funzionato allo stesso modo.
Dentro un byte piu' di 8 bit non si possono fare entrare, e con o senza AND sarebbero entrati gli stessi.
Avrei esplicitato il cast, anche se non necessario.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 20-12-2008, 11:24   #10
!fazz
Moderatore
 
L'Avatar di !fazz
 
Iscritto dal: Nov 2006
Messaggi: 22275
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Anche senza AND sarebbe funzionato allo stesso modo.
Dentro un byte piu' di 8 bit non si possono fare entrare, e con o senza AND sarebbero entrati gli stessi.
Avrei esplicitato il cast, anche se non necessario.
io avrei sfruttato direttamente come detto sopra il non essere typesafe del c per prendere subito gli 8 bit necessari senza and e senza shift soluzione un pò brutale, anche poco chiara da leggere, ma efficace
__________________
"WS" (p280,cx750m,4790k+212evo,z97pro,4x8GB ddr3 1600c11,GTX760-DC2OC,MZ-7TE500, WD20EFRX)
Desktop (three hundred,650gq,3800x+nh-u14s ,x570 arous elite,2x16GB ddr4 3200c16, rx5600xt pulse P5 1TB)+NB: Lenovo p53 i7-9750H,64GB DDR4,2x1TB SSD, T1000
!fazz è offline   Rispondi citando il messaggio o parte di esso
Old 20-12-2008, 17:15   #11
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da !fazz Guarda i messaggi
io avrei sfruttato direttamente come detto sopra il non essere typesafe del c per prendere subito gli 8 bit necessari senza and e senza shift soluzione un pò brutale, anche poco chiara da leggere, ma efficace
E pero' hanno ragione a dire che non e' portabile.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura Samsung Micro RGB R95H, il primo LCD a LED rossi...
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre iPhone 18 Pro: la recensione del miglior iPhone ...
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34 Panasonic, 30 anni di Toughbook: la "Bibbia...
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione realme C100x, lo smartphone economico con la bat...
Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
Samsung Galaxy A57 e A37 costano di più ...
Windows 11 26H2 taglia il consumo di RAM...
KINGPIN è tornato! Il re dell'ove...
CPU usata, ban ereditato: il caso del Ry...
Spunta un engineering sample di Ryzen 9 ...
iPhone 18 Pro, alcuni utenti segnalano s...
Android Auto: Gemini ascolta la domanda ...
OpenAI avvisa oltre 100 organizzazioni p...
Dall'AI alla SI: il rebranding di Trump ...
0patch offrirà supporto esteso pe...
Sudo sembra un iPod, ma nasconde una car...
Meta, OpenAI e Google rifanno OpenClaw: ...
Pixel 10a: Google alza il prezzo di 100 ...
5 sconti TOP e una super city e-bike per...
Speciale Sonoff per utenti Prime: 4 valv...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:54.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v