Εκτύπωση δεκαεξαδικών τιμών σε C++

Ektypose Dekaexadikon Timon Se C



Στον προγραμματισμό C++, η εκτύπωση δεκαεξαδικών τιμών είναι μια κοινή απαίτηση. Είτε εργάζεστε με διευθύνσεις μνήμης, διεξάγετε λειτουργίες Bitwise είτε αντιμετωπίζετε δεκαεξαδικές αναπαραστάσεις δεδομένων, είναι απαραίτητο να κατανοήσετε τις διάφορες μεθόδους για την αποτελεσματική εμφάνιση των τιμών του δεκαεξαδικού. Αυτό το άρθρο διερευνά τις διάφορες μεθόδους και τεχνικές για την εκτύπωση των δεκαεξαδικών τιμών στη C++, ρίχνοντας φως στις εφαρμογές και τις περιπτώσεις χρήσης τους.

Εκτύπωση των τιμών Hex χρησιμοποιώντας Std::hex

Ένας απλός τρόπος για να εκτυπώσετε τις δεκαεξαδικές τιμές στη C++ είναι η χρήση του χειριστή 'std::hex' που παρέχεται από την κεφαλίδα . Αυτός ο χειριστής δίνει εντολή στη ροή εξόδου να ερμηνεύσει τις ακέραιες τιμές ως δεκαεξαδικές κατά την εκτύπωση. Φανταστείτε ότι έχετε ένα σεντούκι θησαυρού γεμάτο αριθμούς. Αλλά αντί για το συνηθισμένο δεκαδικό σύστημα, είναι όλα γραμμένα στη μυστική γλώσσα του δεκαεξαδικού. Για να αποκρυπτογραφήσει αυτούς τους κωδικούς και να αποκαλύψει τις πραγματικές τους τιμές, η C++ προσφέρει ένα χρήσιμο εργαλείο που ονομάζεται 'std::hex'. Αυτό το μαγικό κόλπο στη βιβλιοθήκη μετατρέπει τη ροή εξόδου σας σε δακτύλιο αποκωδικοποιητή, μεταφράζοντας αμέσως αυτούς τους μυστηριώδεις δεκαεξαδικούς αριθμούς στους γνωστούς δεκαδικούς αντίστοιχους.







#include
#include
int main ( ) {
int δεκαδικήΤιμή = 907 ;
std::cout << 'Η δεκαεξαδική τιμή είναι: ' << std::hex << δεκαδική τιμή << std::endl;
ΕΠΙΣΤΡΟΦΗ 0 ;
}


Σε αυτό το παράδειγμα, ο χειριστής 'std::hex' εφαρμόζεται στη ροή εξόδου 'std::cout' πριν από την εκτύπωση του ακέραιου 'decimalValue'. Μετά την εκτύπωση της εξαγωνικής τιμής, η ροή επανέρχεται στην κανονική της συμπεριφορά. Αυτός ο κώδικας δείχνει τέλεια πώς να εκτυπώσετε μια δεκαεξαδική τιμή χρησιμοποιώντας τον χειριστή 'std::hex' στη C++. Ακολουθεί μια ανάλυση του κώδικα:



Κεφαλίδες



: Χρησιμοποιείται για βασικές εισόδους/εξόδους, όπως εκτύπωση στην κονσόλα και παρέχει τον χειριστή 'std::hex' για τη μορφοποίηση της εξόδου ως δεκαεξαδική.





Κύρια λειτουργία

Η 'int decimalValue = 907;' δηλώνει τη μεταβλητή 'decimalValue' τύπου «int» και της εκχωρεί τη δεκαδική τιμή 907.



Το 'std::cout << 'Η δεκαεξαδική τιμή είναι: ' << std::hex << δεκαδική τιμή << std::endl;' εκτυπώνει τη 'Δεκαδική τιμή:' ακολουθούμενη από τη δεκαεξαδική αναπαράσταση του 'δεκαδική τιμή'.

Το 'std::hex' δίνει εντολή στη ροή εξόδου να ερμηνεύσει την ακόλουθη τιμή ως δεκαεξαδική. Η μεταβλητή 'decimalValue' περιέχει τη δεκαδική τιμή που πρέπει να μετατραπεί σε δεκαεξαδικό. Το 'std::endl' εισάγει έναν χαρακτήρα νέας γραμμής μετά την εκτύπωση. Τέλος, αυτός ο κωδικός εκτυπώνει τώρα την 'Δεξαδική τιμή: 38B', όπως μπορείτε να δείτε στο ακόλουθο απόσπασμα εξόδου:

Εκτύπωση των δεκαεξαδικών τιμών με χρήση του προσδιοριστή μορφής '%x'.

Για όσους γνωρίζουν τη γλώσσα προγραμματισμού C, η συνάρτηση 'printf' εκτυπώνει συνοπτικά τις δεκαεξαδικές τιμές στη C++. Ενώ η C++ προσφέρει την προσέγγιση και 'std::hex', η 'printf' παρέχει έναν συνοπτικό και άμεσο τρόπο για να επιτευχθεί το ίδιο αποτέλεσμα.

#include
int main ( ) {
int δεκαδικήΤιμή = 1256 ;
printf ( 'Η δεκαεξαδική τιμή με το printf είναι: %x \n ' , δεκαδική τιμή ) ;
ΕΠΙΣΤΡΟΦΗ 0 ;
}


Σε αυτό το παράδειγμα, ο προσδιοριστής μορφής '%x' στη συνάρτηση 'printf' υποδεικνύει ότι το αντίστοιχο όρισμα πρέπει να εκτυπωθεί σε δεκαεξαδικό. Ο δεδομένος κώδικας είναι ένα τέλειο παράδειγμα εκτύπωσης μιας δεκαεξαδικής τιμής χρησιμοποιώντας το 'printf' σε C++. Ας το αναλύσουμε:

Κεφαλίδες

: Αυτή η κεφαλίδα περιλαμβάνει τη συνάρτηση 'printf' και τις άλλες τυπικές λειτουργίες εισόδου/εξόδου. Η κεφαλίδα περιλαμβάνεται στη σουίτα βιβλιοθηκών που συνοδεύουν τη C++. Φέρνει τη λειτουργικότητα από τη βιβλιοθήκη της γλώσσας C, επιτρέποντας στη C++ να χρησιμοποιήσει τις κλασικές τεχνικές εισόδου και εξόδου που βρίσκονται αρχικά στο C μέσω της συμπερίληψης .

Κύρια λειτουργία

Η 'int decimalValue = 1256;' δηλώνει και εκχωρεί τη δεκαδική τιμή του 1256 σε μια ακέραια μεταβλητή με το όνομα 'decimalValue'. Το 'printf' στο 'printf('Η δεκαεξαδική τιμή με το printf είναι: %x\n', δεκαδική τιμή);' Η δήλωση καλεί τη συνάρτηση 'printf' για να εκτυπώσει τη μορφοποιημένη έξοδο. Το '%x' είναι ο 'προσδιοριστής μορφής' που υποδεικνύει ότι το ακόλουθο όρισμα πρέπει να εκτυπωθεί ως πεζός δεκαεξαδικός αριθμός. Τέλος, το '\n' εισάγει έναν χαρακτήρα νέας γραμμής μετά την εκτύπωση. Αυτός ο κώδικας εξάγει 'Η δεκαεξαδική τιμή με το printf είναι 4e8' στην κονσόλα, όπως φαίνεται στο ακόλουθο απόσπασμα εξόδου:

Εκτύπωση των Hex Values ​​με padding

Όταν ασχολούμαστε με δεκαεξαδικές τιμές, ειδικά διευθύνσεις μνήμης, είναι συχνά επιθυμητό ένα σταθερό πλάτος ή συμπλήρωση. Αυτό μπορεί να επιτευχθεί χρησιμοποιώντας τον χειριστή 'std::setw' που παρέχεται από την κεφαλίδα . Ακολουθεί ένα παράδειγμα σχετικά με τον τρόπο εκτύπωσης μιας τιμής HEX με padding. Αυτό το πρόγραμμα δείχνει πώς να εκτυπώσετε μια δεκαεξαδική τιμή σε C++ με padding χρησιμοποιώντας τις μεθόδους κεφαλίδας και χειριστή .

#include
#include
int main ( ) {
int δεκαδικήΤιμή = 47 ;
std::cout << 'Η δεκαεξαδική τιμή με το padding είναι: ' << std::setw ( 8 ) << std::hex << δεκαδική τιμή << std::endl;
ΕΠΙΣΤΡΟΦΗ 0 ;
}


Σε αυτό το παράδειγμα, το std::setw(8) διασφαλίζει ότι η δεκαεξαδική τιμή εκτυπώνεται με ελάχιστο πλάτος 8 χαρακτήρων. Αυτό είναι ιδιαίτερα χρήσιμο για την ευθυγράμμιση των τιμών σε στήλες ή με διευθύνσεις μνήμης.

Ας σπάσουμε τον κώδικα και ας κατανοήσουμε κάθε γραμμή μία προς μία:

Κεφαλίδες

: Παρέχει τη βασική λειτουργία εισόδου/εξόδου, όπως τη ροή 'std::cout' για εκτύπωση.

: Προσφέρει χειριστές μορφοποίησης όπως 'std::setw' που χρησιμοποιούνται για την τροποποίηση της εμφάνισης εξόδου.

Κύρια λειτουργία

Η 'int decimalValue = 47;' δηλώνει και εκχωρεί τη δεκαδική τιμή του 47 σε μια ακέραια μεταβλητή με το όνομα 'decimalValue'.

Το 'std::cout << 'Η δεκαεξαδική τιμή με padding είναι: ' << std::setw(8) << std::hex << δεκαδική τιμή << std::endl;' Η δήλωση εκτυπώνει τον δεκαεξαδικό αριθμό του 47 με την προσθήκη setw(8). Το 'std::setw(8)' εφαρμόζει τον χειριστή 'std::setw' με όρισμα 8, καθορίζοντας ένα ελάχιστο πλάτος εξόδου 8 χαρακτήρων.

Το 'std::hex' εφαρμόζει τον χειριστή 'std::hex' που λέει στη ροή να ερμηνεύσει την επόμενη τιμή ως δεκαεξαδική όπως εξηγείται σε ένα από τα παραδείγματα. Η ακόλουθη έξοδος εκτυπώνεται στην κονσόλα:

Εκτύπωση των δεκαεξαδικών τιμών των δεδομένων Byte

Όταν εργάζεστε με δεδομένα byte, είναι σύνηθες να αντιπροσωπεύετε κάθε byte ως μια διψήφια δεκαεξαδική τιμή. Αυτό μπορεί να επιτευχθεί διασφαλίζοντας ότι το πλάτος έχει οριστεί στο 2 και χρησιμοποιώντας το 'std::setfill('0')' για να συμπληρώσετε τα μηδενικά που προηγούνται. Το παρακάτω είναι ένα παράδειγμα για να σας βοηθήσει να κατανοήσετε πώς μπορεί να γίνει η εκτύπωση των δεκαεξαδικών τιμών των δεδομένων byte:

#include
#include
int main ( ) {
ανυπόγραφο χαρακτήρα byteData = 0xAB;
std::cout << 'Η δεκαεξαδική αναπαράσταση των δεδομένων byte είναι: '
<< std::setw ( 2 ) << std::setfill ( '0' ) << std::hex << static_cast < ενθ > ( byteData )
<< std::endl;
ΕΠΙΣΤΡΟΦΗ 0 ;
}


Εδώ, το 'std::setw(2)' διασφαλίζει ότι κάθε byte αντιπροσωπεύεται με ελάχιστο πλάτος 2 χαρακτήρων και το 'std::setfill('0')' ορίζει ότι πρέπει να χρησιμοποιούνται μηδενικά στην αρχή για την πλήρωση του πλάτους.

Αυτό το πρόγραμμα που δόθηκε προηγουμένως δείχνει μια πιο προηγμένη προσέγγιση για την εκτύπωση μιας δεκαεξαδικής τιμής σε C++ με συγκεκριμένη μορφοποίηση. Ας το αναλύσουμε για να κατανοήσουμε καλύτερα:

Κεφαλίδες

: Παρέχει μια βασική λειτουργία εισόδου/εξόδου, όπως 'std::cout' και 'std::hex' για εκτύπωση.

: Προσφέρει τους χειριστές μορφοποίησης όπως 'std::setw' και 'std::setfill' που χρησιμοποιούνται για την τροποποίηση της εμφάνισης εξόδου.

Κύρια λειτουργία

Στην κύρια συνάρτηση, ένα ανυπόγραφο 'byteData = 0xAB;' ορίζεται το char που δηλώνει μια μεταβλητή χωρίς υπογραφή char με το όνομα 'byteData' και της εκχωρεί τη δεκαεξαδική τιμή του '0xAB'. Η δήλωση 'std::cout << 'Η δεκαεξαδική αναπαράσταση των δεδομένων byte είναι: ':' εξάγει το μήνυμα στην κονσόλα χρησιμοποιώντας τη ροή εξόδου.

Το '<< std::setw(2) << std::setfill('0') << std::hex << static_cast (byteData) << std::endl;' Η αλυσίδα δηλώσεων εφαρμόζει πολλαπλούς χειριστές για να μορφοποιήσει την έξοδο.

std::setw(2): Ορίζει το ελάχιστο πλάτος εξόδου σε 2 χαρακτήρες.

std::setfill('0'): Προσδιορίζει ότι κάθε συμπλήρωση που χρειάζεται για να φτάσει το ελάχιστο πλάτος θα πρέπει να συμπληρώνεται με τον χαρακτήρα '0'.

std::hex: Λέει στη ροή να ερμηνεύσει την επόμενη τιμή ως δεκαεξαδική.

static_cast (byteData): Μεταφέρει τα ανυπόγραφα δεδομένα χαρακτήρων σε ένα «int» πριν από τη μετατροπή σε δεκαεξαδικό. Αυτό δεν είναι τεχνικά απαραίτητο, αλλά μπορεί να χρησιμοποιηθεί για συνέπεια με ορισμένες επιλογές μορφοποίησης.

std::endl: Εισάγει έναν χαρακτήρα νέας γραμμής μετά την εκτύπωση.

Η έξοδος αυτού του προγράμματος που εκτυπώνεται στην κονσόλα εμφανίζεται στο ακόλουθο απόσπασμα:

συμπέρασμα

Η εκτύπωση δεκαεξαδικών τιμών σε C++ περιλαμβάνει την κατανόηση των διαθέσιμων εργαλείων και την επιλογή της κατάλληλης μεθόδου με βάση τις συγκεκριμένες απαιτήσεις. Είτε επιλέξετε τον χειριστή 'std::hex', τη συνάρτηση 'printf' ή έναν συνδυασμό εργαλείων μορφοποίησης για συμπλήρωση και μηδενικά, η σωστή κατανόηση αυτών των τεχνικών είναι απαραίτητη για κάθε προγραμματιστή C++. Εφαρμόζοντας προσεκτικά αυτές τις μεθόδους, μπορείτε να διασφαλίσετε ότι οι δεκαεξαδικές τιμές σας εμφανίζονται με ακρίβεια και σε οπτικά ελκυστική μορφή που συμβάλλει στη συνολική αναγνωσιμότητα και σαφήνεια του κώδικά σας C++.