/*
* 数字与字符串转换练习
*/
#include<iostream>
#include<string>
#include<sstream>
#include<iomanip>
#include<bitset>
using namespace std;
void DecToStr()
{
int num = 85932;
string result = to_string(num);
cout << "result: " << result << endl;
}
void HexToStr()
{
int num = 0x56A4;
stringstream ss;
// std::setw(n), if num.size() > n, length = num.size()
// else length = n
ss << std::hex << std::setw(10) << std::setfill('0') << num;
string result = ss.str();
cout << "result: " << result << endl;
}
void OctToStr()
{
int num = 05673;
stringstream ss;
ss << std::oct << std::setw(2) << std::setfill('0') << num;
string result = ss.str();
cout << "result: " << result << endl;
}
void BinToStr()
{
// bitset 限制长度
int num = 0b100111;
bitset<10> temp(num);
string result = temp.to_string();
cout << "result: " << result << endl;
}
/* bitset 提供了指定长度的二进制输出,
* 但是对于不知道有多长的数字来说,使用起来不太理想
*/
void BigBinToStr()
{
int num = 0b101000110100111;
int rem = 0;
int modTemp = 1;
string result = "0b";
while (modTemp != 0) {
modTemp = num / 2;
rem = num % 2;
num = modTemp;
result.insert(2, to_string(rem));
}
cout << "result: " << result << endl;
}
// 二进制转十六进制
void BinToHex() {
int num = 0b101000110100111;
stringstream ss;
ss << std::hex << num;
string result = ss.str();
cout << "result: " << result << endl;
}
void StrToHex() {
string numStr = "0x51a7";
int result = stoi(numStr, 0, 16);
cout << "result: " << std::hex << std::uppercase << result << endl;
}
void StrToOct() {
string numStr = "076547";
int result = stoi(numStr, 0, 8);
cout << "result: " << std::oct << result << endl;
}
void StrToDec() {
string numStr = "123456";
int result = stoi(numStr, 0, 10);
cout << "result: " << result << endl;
}
void StrToBin() {
string numStr = "11011001"; // 不能用 0b 开头
int result = stoi(numStr, 0, 2);
cout << "result: " << result << endl;
}
int main()
{
StrToBin();
return 0;
}
数字与字符串转换
本文介绍了如何在C++中实现从十进制、十六进制、八进制到二进制及反之的转换函数,包括使用`to_string`、`stringstream`、`bitset`和`stoi`等方法。
摘要由CSDN通过智能技术生成