Προς το περιεχόμενο

Ερώτηση εξαγωγή bits και αλλαγή endian


DIMITRISG

Προτεινόμενες αναρτήσεις

Θέλω να καταλάβω σε ένα πρόγραμμα που διαβάζει μια δέσμη πως βρίσκει την τιμή 1931

Η τιμή βρίσκεται σε 15 bits μέσα σε 3 bytes ξεκινώντας από το bit 5.
Η τιμή είναι Signed
Από μια δέσμη 460 bytes διαβάζει 3 bytes σε bigendian:
CB1E00 και παίρνει τα 15 bits
11 001011 00011110 00000000

μετά κρατά το 0 δεξιά και το βάζειι πρώτο αριστερά και αντιστρέφει σε little endian:
Παίρνει τα 8 δεξιά και τα βάζει αριστερά και συμπληρώνει με τα υπόλοιπα

001011000111100
0
00011110001011

Έτσι πρέπει να γίνει η μετατροπή από big σε little;
Έψαξα μεθόδους μεταχείρισης bits αλλά δεν βρίσκω τι είναι αυτή η μέθοδος
Σίγουρα έχει να κάνει με τον αριθμό των bits αυτή η μέθοδος γιατί όταν είναι πχ 16 ή 24  δεν κάνει έτσι αλλά με τον κλασσικό τρόπο (δηλαδή 001ECB)

 

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Οπότε από big endian CB1E00 και μήκος 15 bits από την θέση 5 για να μετατρέψουμε σε little endian:

001ECB

κρατάμε από το 00 το bit  7 (που ήταν το 15o bit σε big endian) , το byte 1E που είναι τα bits 7 έως 0 και τα 6 bits 5 έως 0 του CB.

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Δεν είμαι σίγουρος ότι κατάλαβα τι ακριβώς ψάχνεις. Για μετατροπή μεταξύ big <-> little endian, απλά αντιστρέφεις τη σειρά των bytes. Αν το CB 1E 00 είναι ένα hex value σε little endian, σε big endian αναπαρίσταται ως 00 1E CB. Και το αντίστροφο, αν είναι big -> little.

Tο ίδιο προφανώς και όταν μιλάμε για bits. Αν αλλάξεις όμως τη σειρά των bytes (και άρα των bit σε 8δες), αν έβρισκες κάπου εκεί ανάμεσα τον δεκαδικό 1931 διαβάζοντας big-endian (και μάλιστα "δανειζόμενος" bits από διπλανά bytes), δεν ξέρω θα τον ξαναβρείς απαραίτητα διαβάζοντας σε little-endian... 

Επεξ/σία από n3a
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Όντως είναι λίγο μπέρδεμα.

Η τιμή είναι σε little endian. Η δέσμη ολόκληρη είναι σε big endian. Για να βρω μια τιμή αντιστρέφω τα bytes. Όταν η τιμή καταλαμβάνει ολόκληρο το byte ή ξεκινά από το 7ο bit η μετατροπή γίνεται φυσιολογικά. Όταν όμως η τιμή βρίσκεται ενδιάμεσα, δεν είμαι ακόμα σίγουρος ότι πρέπει να αντιστραφουν τα bits κατά τον τρόπο που ανέφερα ανωτέρω. Πιθανόν να είναι μια τεχνική για αυτό ρώτησα μήπως κάποιος μου το επιβεβαιώσει...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αν θέλεις δώσε μας λίγες περισσότερες πληροφορίες γιατί κάπου χάνομαι... Ποιο είναι αυτό το πρόγραμμα που διαβάζει συγκεκριμένα bits από δυο διαφορετικά bytes για να εξάγει έναν αριθμό και ποια η λειτουργία του (κυρίως, γιατί το κάνει); Υπάρχει κάποιο κωμάτι κώδικα;   

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...