十進制與十六進制之間相互轉換
10_to_16
與二進制類似,十進制轉十六進制對16整除,得到的余數的倒序即為轉換而成的十六進制,特別地,如果超過10以后,分別用ABCDEF或abcdef來代替10、11、12、13、14、15。
代碼1:
#include <iostream>
using namespace std;#include <sstream>
std::string decimalToHex1(int decimalNumber) //10進制轉16進制
{std::ostringstream oss;oss << std::hex << std::uppercase << decimalNumber; // 將整數格式化為十六進制字符串 return oss.str();
}int main()
{cout << decimalToHex1(1000) << "\n";system("pause");return 0;
}
函數decimalToHex1
接受一個int
類型的參數decimalNumber
,表示要轉換的十進制數,并返回一個std::string
類型的結果,即轉換后的十六進制字符串。
std::ostringstream
是一個輸出字符串流類,它可以用來將各種類型的數據格式化為字符串。在這里,oss
是一個std::ostringstream
類型的對象,它將被用來構建十六進制字符串。
std::hex
:設置流為十六進制格式。這意味著接下來插入到流中的整數將被格式化為十六進制數。
std::uppercase
:確保十六進制輸出使用大寫字母(A-F),而不是小寫字母(a-f)。
decimalNumber
:將十進制數插入到流中。由于流已經被設置為十六進制格式,因此decimalNumber
將被轉換為十六進制格式,并且由于std::uppercase
的影響,其輸出將是大寫字母。std::ostringstream
類提供了一個str()
成員函數,用于獲取流中當前的內容作為一個字符串。在這里,我們調用oss.str()
來獲取格式化后的十六進制字符串,并將其作為函數的返回值。
?代碼2:
#include <iostream>
using namespace std;
#include<string>
#include<vector>string decimalToHex(int decimalNumber) // 功能 convert_10_to_16
{// 定義一個整型向量ivec來存儲十進制數轉換十六進制時的每一位 vector<int> ivec;while (decimalNumber != 0){ivec.push_back(decimalNumber % 16);// 將十進制數對16取余,得到十六進制的一位 decimalNumber = decimalNumber / 16;}string hexadecimal = ""; //存儲轉換后的字符串int temp = 0;string s = "";// 獲取ivec的大小 vector<int>::size_type sz = ivec.size();// 遍歷ivec向量 for (vector<int>::size_type index = 0; index != sz; ++index){// 如果當前位大于9(即A-F的十六進制位) if (ivec[sz - 1 - index] > 9){// 轉換為字符A-F temp = ivec[sz - 1 - index] + 55; // 這里使用ASCII碼進行轉換,55是字符'A'與10的差值 // 將字符添加到字符串s中 s = temp + '0' - '0';}else{// 如果當前位小于等于9(即0-9的十六進制位) // 直接轉換為字符0-9 加上字符'0'的ASCII碼值(48)來得到對應字符的ASCII碼值s = ivec[sz - 1 - index] + '0'; //ASCII碼值被隱式地轉換為char類型,并賦值給s}hexadecimal += s;}return hexadecimal;
}int main()
{cout << decimalToHex(1000) << endl;system("pause");return 0;
}