Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione OPPO Find X9 Ultra: è lui il cameraphone definitivo
Recensione OPPO Find X9 Ultra: è lui il cameraphone definitivo
Find X9 Ultra è lo smartphone che tanti aspettavano, e finalmente è arrivato anche in Italia. Abbiamo provato il flagship di OPPO per diverse settimane, e siamo volati fino in Cina alla sua presentazione ufficiale. Tutto gira intorno al suo incredibile comparto fotografico in collaborazione con Hasselblad e con un totale di sei fotocamere. Il resto è un mix di specifiche di altissimo livello, così come il prezzo. Vi raccontiamo tutto nella nostra recensione completa.
Ecovacs Deebot X12 OmniCyclone: lava grazie a FocusJet
Ecovacs Deebot X12 OmniCyclone: lava grazie a FocusJet
Il nuovo Deebot X12 OmniCyclone abbina un sistema di raccolta dello sporco senza sacchetto, un rullo di lavaggio esteso e la tecnologia FocusJet per intervenire più efficacemente sulle macchie più persistenti. Un robot completo e preciso che aiuta a tenere puliti i pavimenti di casa con il minimo sforzo
Narwal Flow 2: la pulizia di casa con un mocio a nastro
Narwal Flow 2: la pulizia di casa con un mocio a nastro
Narwal Flow 2 implementa un mocio a nastro che esegue una pulizia dettagliata del pavimento di casa, in abbinamento ad un potente motore di aspirazione della polvere: un prodotto ideale per gestire in autonomia e con grande efficacia le necessità di pulizia dei pavimenti di casa
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: 22074
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: 22074
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


Recensione OPPO Find X9 Ultra: è lui il cameraphone definitivo Recensione OPPO Find X9 Ultra: è lui il c...
Ecovacs Deebot X12 OmniCyclone: lava grazie a FocusJet Ecovacs Deebot X12 OmniCyclone: lava grazie a Fo...
Narwal Flow 2: la pulizia di casa con un mocio a nastro Narwal Flow 2: la pulizia di casa con un mocio a...
Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless Tastiera gaming MSI GK600 TKL: switch hot-swap, ...
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici DJI Osmo Pocket 4: la gimbal camera tascabile cr...
SpaceX: la droneship Just Read the Instr...
Project Helix sarà prodotta anche...
La NASA pubblica alcuni aggiornamenti su...
Tute spaziali AxEMU per Artemis: Axiom S...
Nutanix Government Cloud Clusters arriva...
Troy Baker lavora a un progetto tutto su...
Motorola Edge 60 Neo è il compatt...
Stretto di Hormuz, finti funzionari iran...
Dragon Ball Xenoverse 3 annunciato uffic...
WINDTRE BUSINESS potenzia i servizi IoT ...
OPPO rinnova l'ecosistema: arrivano Watc...
OPPO Find X9 Ultra ufficiale: debutta il...
Renault Twingo: esposta a Milano per far...
Intel vuole cambiare: overclocking anche...
Anche PlayStation introduce la verifica ...
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: 20:22.


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