Στον προγραμματισμό C++, η εκτύπωση δεκαεξαδικών τιμών είναι μια κοινή απαίτηση. Είτε εργάζεστε με διευθύνσεις μνήμης, διεξάγετε λειτουργίες Bitwise είτε αντιμετωπίζετε δεκαεξαδικές αναπαραστάσεις δεδομένων, είναι απαραίτητο να κατανοήσετε τις διάφορες μεθόδους για την αποτελεσματική εμφάνιση των τιμών του δεκαεξαδικού. Αυτό το άρθρο διερευνά τις διάφορες μεθόδους και τεχνικές για την εκτύπωση των δεκαεξαδικών τιμών στη C++, ρίχνοντας φως στις εφαρμογές και τις περιπτώσεις χρήσης τους.
Εκτύπωση των τιμών Hex χρησιμοποιώντας 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++. Ακολουθεί μια ανάλυση του κώδικα:
Κεφαλίδες
Κύρια λειτουργία
Η 'int decimalValue = 907;' δηλώνει τη μεταβλητή 'decimalValue' τύπου «int» και της εκχωρεί τη δεκαδική τιμή 907.
Το 'std::cout << 'Η δεκαεξαδική τιμή είναι: ' << std::hex << δεκαδική τιμή << std::endl;' εκτυπώνει τη 'Δεκαδική τιμή:' ακολουθούμενη από τη δεκαεξαδική αναπαράσταση του 'δεκαδική τιμή'.
Το 'std::hex' δίνει εντολή στη ροή εξόδου να ερμηνεύσει την ακόλουθη τιμή ως δεκαεξαδική. Η μεταβλητή 'decimalValue' περιέχει τη δεκαδική τιμή που πρέπει να μετατραπεί σε δεκαεξαδικό. Το 'std::endl' εισάγει έναν χαρακτήρα νέας γραμμής μετά την εκτύπωση. Τέλος, αυτός ο κωδικός εκτυπώνει τώρα την 'Δεξαδική τιμή: 38B', όπως μπορείτε να δείτε στο ακόλουθο απόσπασμα εξόδου:
Εκτύπωση των δεκαεξαδικών τιμών με χρήση του προσδιοριστή μορφής '%x'.
Για όσους γνωρίζουν τη γλώσσα προγραμματισμού C, η συνάρτηση 'printf' εκτυπώνει συνοπτικά τις δεκαεξαδικές τιμές στη C++. Ενώ η C++ προσφέρει την προσέγγιση
int main ( ) {
int δεκαδικήΤιμή = 1256 ;
printf ( 'Η δεκαεξαδική τιμή με το printf είναι: %x \n ' , δεκαδική τιμή ) ;
ΕΠΙΣΤΡΟΦΗ 0 ;
}
Σε αυτό το παράδειγμα, ο προσδιοριστής μορφής '%x' στη συνάρτηση 'printf' υποδεικνύει ότι το αντίστοιχο όρισμα πρέπει να εκτυπωθεί σε δεκαεξαδικό. Ο δεδομένος κώδικας είναι ένα τέλειο παράδειγμα εκτύπωσης μιας δεκαεξαδικής τιμής χρησιμοποιώντας το 'printf' σε C++. Ας το αναλύσουμε:
Κεφαλίδες
Κύρια λειτουργία
Η 'int decimalValue = 1256;' δηλώνει και εκχωρεί τη δεκαδική τιμή του 1256 σε μια ακέραια μεταβλητή με το όνομα 'decimalValue'. Το 'printf' στο 'printf('Η δεκαεξαδική τιμή με το printf είναι: %x\n', δεκαδική τιμή);' Η δήλωση καλεί τη συνάρτηση 'printf' για να εκτυπώσει τη μορφοποιημένη έξοδο. Το '%x' είναι ο 'προσδιοριστής μορφής' που υποδεικνύει ότι το ακόλουθο όρισμα πρέπει να εκτυπωθεί ως πεζός δεκαεξαδικός αριθμός. Τέλος, το '\n' εισάγει έναν χαρακτήρα νέας γραμμής μετά την εκτύπωση. Αυτός ο κώδικας εξάγει 'Η δεκαεξαδική τιμή με το printf είναι 4e8' στην κονσόλα, όπως φαίνεται στο ακόλουθο απόσπασμα εξόδου:
Εκτύπωση των Hex Values με padding
Όταν ασχολούμαστε με δεκαεξαδικές τιμές, ειδικά διευθύνσεις μνήμης, είναι συχνά επιθυμητό ένα σταθερό πλάτος ή συμπλήρωση. Αυτό μπορεί να επιτευχθεί χρησιμοποιώντας τον χειριστή 'std::setw' που παρέχεται από την κεφαλίδα
#include
int main ( ) {
int δεκαδικήΤιμή = 47 ;
std::cout << 'Η δεκαεξαδική τιμή με το padding είναι: ' << std::setw ( 8 ) << std::hex << δεκαδική τιμή << std::endl;
ΕΠΙΣΤΡΟΦΗ 0 ;
}
Σε αυτό το παράδειγμα, το std::setw(8) διασφαλίζει ότι η δεκαεξαδική τιμή εκτυπώνεται με ελάχιστο πλάτος 8 χαρακτήρων. Αυτό είναι ιδιαίτερα χρήσιμο για την ευθυγράμμιση των τιμών σε στήλες ή με διευθύνσεις μνήμης.
Ας σπάσουμε τον κώδικα και ας κατανοήσουμε κάθε γραμμή μία προς μία:
Κεφαλίδες
Κύρια λειτουργία
Η '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++ με συγκεκριμένη μορφοποίηση. Ας το αναλύσουμε για να κατανοήσουμε καλύτερα:
Κεφαλίδες
Κύρια λειτουργία
Στην κύρια συνάρτηση, ένα ανυπόγραφο 'byteData = 0xAB;' ορίζεται το char που δηλώνει μια μεταβλητή χωρίς υπογραφή char με το όνομα 'byteData' και της εκχωρεί τη δεκαεξαδική τιμή του '0xAB'. Η δήλωση 'std::cout << 'Η δεκαεξαδική αναπαράσταση των δεδομένων byte είναι: ':' εξάγει το μήνυμα στην κονσόλα χρησιμοποιώντας τη ροή εξόδου.
Το '<< std::setw(2) << std::setfill('0') << std::hex << static_cast
std::setw(2): Ορίζει το ελάχιστο πλάτος εξόδου σε 2 χαρακτήρες.
std::setfill('0'): Προσδιορίζει ότι κάθε συμπλήρωση που χρειάζεται για να φτάσει το ελάχιστο πλάτος θα πρέπει να συμπληρώνεται με τον χαρακτήρα '0'.
std::hex: Λέει στη ροή να ερμηνεύσει την επόμενη τιμή ως δεκαεξαδική.
static_cast
std::endl: Εισάγει έναν χαρακτήρα νέας γραμμής μετά την εκτύπωση.
Η έξοδος αυτού του προγράμματος που εκτυπώνεται στην κονσόλα εμφανίζεται στο ακόλουθο απόσπασμα:
συμπέρασμα
Η εκτύπωση δεκαεξαδικών τιμών σε C++ περιλαμβάνει την κατανόηση των διαθέσιμων εργαλείων και την επιλογή της κατάλληλης μεθόδου με βάση τις συγκεκριμένες απαιτήσεις. Είτε επιλέξετε τον χειριστή 'std::hex', τη συνάρτηση 'printf' ή έναν συνδυασμό εργαλείων μορφοποίησης για συμπλήρωση και μηδενικά, η σωστή κατανόηση αυτών των τεχνικών είναι απαραίτητη για κάθε προγραμματιστή C++. Εφαρμόζοντας προσεκτικά αυτές τις μεθόδους, μπορείτε να διασφαλίσετε ότι οι δεκαεξαδικές τιμές σας εμφανίζονται με ακρίβεια και σε οπτικά ελκυστική μορφή που συμβάλλει στη συνολική αναγνωσιμότητα και σαφήνεια του κώδικά σας C++.