Drukowanie wartości szesnastkowych w C++

Drukowanie Wartosci Szesnastkowych W C



W programowaniu w C++ częstym wymogiem jest drukowanie wartości szesnastkowych. Niezależnie od tego, czy pracujesz z adresami pamięci, przeprowadzasz operacje bitowe, czy masz do czynienia z szesnastkową reprezentacją danych, istotne jest zrozumienie różnych metod efektywnego wyświetlania wartości szesnastkowych. W tym artykule omówiono różne metody i techniki drukowania wartości szesnastkowych w języku C++, rzucając światło na ich zastosowania i przypadki użycia.

Drukowanie wartości szesnastkowych przy użyciu Std::hex

Jednym z prostych sposobów drukowania wartości szesnastkowych w C++ jest użycie manipulatora „std::hex” dostarczonego przez nagłówek . Ten manipulator instruuje strumień wyjściowy, aby podczas drukowania interpretował wartości całkowite jako szesnastkowe. Wyobraź sobie, że masz skrzynię skarbów pełną liczb. Ale zamiast zwykłego systemu dziesiętnego, wszystkie są zapisane w tajnym języku szesnastkowym. Aby rozszyfrować te kody i ujawnić ich prawdziwe wartości, C++ oferuje pomocne narzędzie o nazwie „std::hex”. Ta magiczna sztuczka w bibliotece przekształca strumień wyjściowy w pierścień dekodera, natychmiast tłumacząc te tajemnicze liczby szesnastkowe na ich znane odpowiedniki dziesiętne.







#include
#include
int główny ( ) {
int wartość dziesiętna = 907 ;
std::cout << „Wartość szesnastkowa to: „ << std::hex << wartość dziesiętna << std::endl;
powrót 0 ;
}


W tym przykładzie manipulator „std::hex” jest stosowany do strumienia wyjściowego „std::cout” przed wydrukowaniem liczby całkowitej „decimalValue”. Po wydrukowaniu wartości szesnastkowej strumień powraca do normalnego zachowania. Ten kod doskonale pokazuje, jak wydrukować wartość szesnastkową za pomocą manipulatora „std::hex” w C++. Oto rozkład kodu:



Nagłówki



: Służy do podstawowych operacji wejścia/wyjścia, takich jak drukowanie na konsoli, i udostępnia manipulator „std::hex” do formatowania danych wyjściowych w formacie szesnastkowym.





Główna funkcja

Wartość „int decimalValue = 907;” deklaruje zmienną „decimalValue” typu „int” i przypisuje jej wartość dziesiętną 907.



„std::cout << „Wartość szesnastkowa to: ” << std::hex << wartość decimal << std::endl;” wypisuje „wartość szesnastkową:”, po której następuje szesnastkowa reprezentacja „wartości dziesiętnej”.

„std::hex” instruuje strumień wyjściowy, aby zinterpretował następującą wartość jako szesnastkową. Zmienna „decimalValue” zawiera wartość dziesiętną, która ma zostać przeliczona na wartość szesnastkową. „std::endl” wstawia znak nowej linii po wydrukowaniu. Na koniec ten kod wypisuje teraz „Wartość szesnastkową: 38B”, jak widać w następującym fragmencie kodu wyjściowego:

Drukowanie wartości szesnastkowych przy użyciu specyfikatora formatu „%x”.

Dla osób zaznajomionych z językiem programowania C funkcja „printf” zwięźle wypisuje wartości szesnastkowe w C++. Podczas gdy C++ oferuje podejście i „std::hex”, „printf” zapewnia zwięzły i bezpośredni sposób na osiągnięcie tego samego rezultatu.

#include
int główny ( ) {
int wartość dziesiętna = 1256 ;
drukuj ( „Wartość szesnastkowa z printf to: %x \N ' , wartość dziesiętna ) ;
powrót 0 ;
}


W tym przykładzie specyfikator formatu „%x” w funkcji „printf” wskazuje, że odpowiedni argument powinien zostać wydrukowany w formacie szesnastkowym. Podany kod jest doskonałym przykładem drukowania wartości szesnastkowej za pomocą „printf” w C++. Rozbijmy to:

Nagłówki

: Ten nagłówek zawiera funkcję „printf” i inne standardowe funkcje wejścia/wyjścia. Nagłówek jest zawarty w pakiecie bibliotek dostarczanych z C++. Wprowadza funkcjonalność z biblioteki języka C, umożliwiając C++ wykorzystanie klasycznych technik wejścia i wyjścia, które oryginalnie można znaleźć w C poprzez włączenie .

Główna funkcja

Wartość „int decimalValue = 1256;” deklaruje i przypisuje wartość dziesiętną 1256 do zmiennej całkowitej o nazwie „decimalValue”. „printf” w „printf („Wartość szesnastkowa w printf to: %x\n”, wartość decimal);” instrukcja wywołuje funkcję „printf”, aby wydrukować sformatowany wynik. „%x” to „specyfikator formatu”, który wskazuje, że następujący argument powinien zostać wydrukowany jako mała liczba szesnastkowa. Na koniec „\n” wstawia znak nowej linii po wydrukowaniu. Ten kod wyświetla na konsoli komunikat „Wartość szesnastkowa przy printf wynosi 4e8”, jak widać w następującym fragmencie kodu wyjściowego:

Drukowanie wartości szesnastkowych z dopełnieniem

W przypadku wartości szesnastkowych, zwłaszcza adresów pamięci, często pożądana jest stała szerokość lub dopełnienie. Można to osiągnąć za pomocą manipulatora „std::setw” dostarczonego przez nagłówek . Oto przykład drukowania wartości szesnastkowej z dopełnieniem. Ten program demonstruje, jak wydrukować wartość szesnastkową w C++ z dopełnieniem przy użyciu nagłówka i metod manipulatora.

#include
#include
int główny ( ) {
int wartość dziesiętna = 47 ;
std::cout << „Wartość szesnastkowa z dopełnieniem to: „ << std::setw ( 8 ) << std::hex << wartość dziesiętna << std::endl;
powrót 0 ;
}


W tym przykładzie std::setw(8) zapewnia wydrukowanie wartości szesnastkowej z minimalną szerokością 8 znaków. Jest to szczególnie przydatne do wyrównywania wartości w kolumnach lub z adresami pamięci.

Złammy kod i zrozumiemy każdą linię po kolei:

Nagłówki

: Udostępnia podstawowe funkcje wejścia/wyjścia, takie jak strumień „std::cout” do drukowania.

: Udostępnia manipulatory formatowania, takie jak „std::setw”, które służą do modyfikowania wyglądu wyjściowego.

Główna funkcja

Wartość „int decimalValue = 47;” deklaruje i przypisuje wartość dziesiętną 47 do zmiennej całkowitej o nazwie „decimalValue”.

„std::cout << „Wartość szesnastkowa z dopełnieniem to: ” << std::setw(8) << std::hex << wartość decimal << std::endl;” instrukcja wypisuje liczbę szesnastkową 47 z dopełnieniem setw(8). Opcja „std::setw(8)” stosuje manipulator „std::setw” z argumentem 8, określając minimalną szerokość wyjściową wynoszącą 8 znaków.

Opcja „std::hex” stosuje manipulator „std::hex”, który nakazuje strumieniowi interpretować następną wartość w postaci szesnastkowej, jak wyjaśniono w jednym z podanych przykładów. Na konsoli zostaną wydrukowane następujące dane wyjściowe:

Drukowanie wartości szesnastkowych danych bajtowych

Podczas pracy z danymi bajtowymi często przedstawia się każdy bajt jako dwucyfrową wartość szesnastkową. Można to osiągnąć, upewniając się, że szerokość jest ustawiona na 2 i używając „std::setfill(‚0”)” do wypełnienia zer wiodących. Poniżej znajduje się przykład, który pomoże Ci zrozumieć, w jaki sposób można wydrukować wartości szesnastkowe danych bajtowych:

#include
#include
int główny ( ) {
unsigned char byteData = 0xAB;
std::cout << „Szesnastkowa reprezentacja danych bajtowych to: „
<< std::setw ( 2 ) << std::setfill ( „0” ) << std::hex << static_cast < wew > ( bajtDane )
<< std::endl;
powrót 0 ;
}


W tym przypadku „std::setw(2)” zapewnia, że ​​każdy bajt jest reprezentowany przez minimalną szerokość 2 znaków, a „std::setfill(‚0’)” określa, że ​​do wypełnienia szerokości należy użyć zer wiodących.

Ten wcześniej podany program demonstruje bardziej zaawansowane podejście do drukowania wartości szesnastkowych w C++ z określonym formatowaniem. Rozłóżmy to na czynniki pierwsze, aby lepiej zrozumieć:

Nagłówki

: Zapewnia podstawowe funkcje wejścia/wyjścia, takie jak „std::cout” i „std::hex” do drukowania.

: oferuje manipulatory formatowania, takie jak „std::setw” i „std::setfill”, które służą do modyfikowania wyglądu wyjściowego.

Główna funkcja

W funkcji głównej bez znaku „byteData = 0xAB;” char, który deklaruje zmienną typu unsigned char o nazwie „byteData” i przypisuje jej wartość szesnastkową „0xAB”. Instrukcja „std::cout << „Szesnastkowa reprezentacja danych bajtowych to: Instrukcja „:” wysyła komunikat do konsoli przy użyciu strumienia wyjściowego.

The „<< std::setw(2) << std::setfill(‚0’) << std::hex << static_cast (byteData) << std::endl;” łańcuch instrukcji stosuje wiele manipulatorów do formatowania danych wyjściowych.

std::setw(2): Ustawia minimalną szerokość wyjściową na 2 znaki.

std::setfill('0'): Określa, że ​​wszelkie dopełnienie wymagane do osiągnięcia minimalnej szerokości powinno być wypełnione znakiem „0”.

std::hex: Nakazuje strumieniowi interpretację następnej wartości jako szesnastkowej.

static_cast (byteData): Rzutuje dane znaku bez znaku na „int” przed konwersją na zapis szesnastkowy. Nie jest to konieczne z technicznego punktu widzenia, ale można je zastosować w celu zachowania spójności z niektórymi opcjami formatowania.

std::endl: Po wydrukowaniu wstawia znak nowego wiersza.

Dane wyjściowe tego programu wydrukowane na konsoli pokazano w następującym fragmencie:

Wniosek

Drukowanie wartości szesnastkowych w C++ wiąże się ze zrozumieniem dostępnych narzędzi i wyborem odpowiedniej metody w oparciu o konkretne wymagania. Niezależnie od tego, czy wybierzesz manipulator „std::hex”, funkcję „printf”, czy kombinację narzędzi formatujących do dopełniania i zer wiodących, solidna znajomość tych technik jest niezbędna dla każdego programisty C++. Stosując te metody w sposób przemyślany, możesz mieć pewność, że wartości szesnastkowe będą wyświetlane dokładnie i w atrakcyjnym wizualnie formacie, co wpłynie na ogólną czytelność i przejrzystość kodu C++.