C++中二进制、字符串、十六进制、十进制之间的转换

本文详细介绍了不同数制之间的转换方法,包括十进制与二进制、字符串与二进制、字符串与十进制、十进制与十六进制及二进制与十六进制之间的转换。通过具体的代码示例,读者可以学习如何使用C++实现这些转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、十进制和二进制相互转换

2、字符串和二进制相互转换

3、字符串和十进制相互转换

4、十进制和十六进制相互转换

5、二进制和十六进制


1、十进制和二进制相互转换

(1)十进制转二进制

int a = 10;
bitset<10> bit(a);
cout << bit << endl;

输出:0000001010

(2)二进制转十进制

     第一种方法:

bitset<10> bit("010101");
int a = bit.to_ullong(); //这里为unsigned long long
cout << a << endl;

输出:21

    第二种方法: 

string out = "0101";
int x = stoi(out, nullptr, 2);
cout << x <<endl;

输出:5

2、字符串和二进制相互转换

(1)二进制转字符串

bitset<10> bit("010101");
string str = bit.to_string();
cout << str << endl;

输出:0000010101

(2)字符串转二进制

string str = "010101";
bitset<10> bit(str);	
cout << bit << endl;

输出:0000010101

3、字符串和十进制相互转换

(1)十进制转字符串

int a = 345;
string str = to_string(a);
cout <<str << endl;

输出:345

(2)字符串转十进制

string str = "3456";
int a = stoi(str);
cout << a << endl;

输出:3456

4、十进制和十六进制相互转换

(1)十六进制转十进制

    第一种方法:

#include <sstream>

int x;
stringstream ss;
ss << std::hex << "1A";  //std::oct(八进制)、std::dec(十进制)
ss >> x;
cout << x<<endl;

输出:26

    第二种方法:

string out = "1A";
int x = stoi(out, nullptr, 16);
cout << x <<endl;

输出:26

 (2)十进制转十六进制

int x = 26 ;
string out;
stringstream ss;
ss << std::hex <<x;
ss >> out ;
transform(out.begin(), out.end(), out.begin(), ::toupper);
cout << out <<endl;

输出:1A

5、二进制和十六进制

(1)二进制转十六进制

string binary = "11010101";
string hex;
stringstream ss;
ss << std::hex << stoi(binary, nullptr, 2);
ss >> hex;
transform(hex.begin(), hex.end(), hex.begin(), ::toupper);
cout << hex <<endl;

输出:D5

(2)十六进制转二进制

string binary = "D5";
bitset<8> bit(stoi(binary, nullptr, 16));
cout << bit << endl;

输出:11010101

 

### C++二进制十六进制的实现 在 C++ 编程中,可以通过字符串处理的方式将二进制转换十六进制数。以下是具体的实现思路以及示例代码: #### 实现逻辑 1. **输入验证**:接收一个由 '0' 和 '1' 组成的二进制字符串作为输入。 2. **分组处理**:由于每四位二进制对应一位十六进制,因此需要将二进制字符串按四位一组分割。 3. **逐段转换**:对于每一组二进制子串,将其解析为十进制数值后再映射到对应的十六进制字符。 4. **拼接结果**:最终将所有转换得到的十六进制字符连接起来形成完整的十六进制表示。 下面是基于以上逻辑编写的完整程序: ```cpp #include <iostream> #include <string> using namespace std; // 辅助函数:将长度不超过4的一段二进制字符串转化为其对应的十六进制字符 char binaryGroupToHex(const string& binStr) { int value = 0; for(char c : binStr){ value = (value << 1) | (c - '0'); // 左移并加上当前位的值 } if(value >= 0 && value <= 9){ return '0' + value; // 对应于数字部分 }else{ return 'A' + (value - 10); // 对应于字母 A-F 部分 } } void binaryToHex(string binaryString) { // 补齐至能被4整除的长度 while(binaryString.length() % 4 != 0){ binaryString.insert(0, "0"); } string hexResult = ""; // 每次取四个字符进行转换 for(size_t i = 0; i < binaryString.size(); i += 4){ string group = binaryString.substr(i, 4); char hexChar = binaryGroupToHex(group); hexResult += hexChar; } cout << "转换后的十六进制数为:" << hexResult << endl; } int main(){ string binaryInput; cout << "请输入一个二进制数(仅含0和1):"; cin >> binaryInput; binaryToHex(binaryInput); return 0; } ``` 此代码实现了从用户输入的一个二进制字符串到相应十六进制形式的转化过程[^4]。 #### 关键点说明 - 输入前需确保数据合法性,即只接受包含‘0’与‘1’的有效二进制序列。 - 当原始二进制位数不满足完全划分时,在高位补零使其能够均匀分配给各四比特单元[^5]。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值