gpt4 book ai didi

c++ - 在十六进制格式和二进制格式之间转换字符串

转载 作者:可可西里 更新时间:2023-11-01 15:36:53 30 4
gpt4 key购买 nike

是否有任何实用程序或库提供了在十六进制/二进制格式之间转换字符串的简单函数?我一直在搜索 SO,目前正在使用查找表方法。顺便说一句,由于它可能是一个长字符串,我不会考虑将字符串转换为整数并进行格式转换,因为长字符串可能大于 MAX_INT(或其他整数数据类型)。

例如:

0xA1 => 10100001
11110001 => 0xF1

PS: 我的项目使用的是 Boost 1.44,有点过时了。因此,如果该实用程序来自 Boost,希望它在 1.44 中可用。

最佳答案

您可以结合使用 std::stringstreamstd::hexstd::bitset 在十六进制和二进制之间进行转换在 C++03 中。

这是一个例子:

#include <iostream>
#include <sstream>
#include <bitset>
#include <string>

using namespace std;

int main()
{
string s = "0xA";
stringstream ss;
ss << hex << s;
unsigned n;
ss >> n;
bitset<32> b(n);
// outputs "00000000000000000000000000001010"
cout << b.to_string() << endl;
}

编辑:

关于精化问题,这里有一个关于十六进制字符串和二进制字符串之间转换的代码示例(您可以使用十六进制 char<>bits 部分的辅助函数进行重构,并改用映射或开关等)。

const char* hex_char_to_bin(char c)
{
// TODO handle default / error
switch(toupper(c))
{
case '0': return "0000";
case '1': return "0001";
case '2': return "0010";
case '3': return "0011";
case '4': return "0100";
case '5': return "0101";
case '6': return "0110";
case '7': return "0111";
case '8': return "1000";
case '9': return "1001";
case 'A': return "1010";
case 'B': return "1011";
case 'C': return "1100";
case 'D': return "1101";
case 'E': return "1110";
case 'F': return "1111";
}
}

std::string hex_str_to_bin_str(const std::string& hex)
{
// TODO use a loop from <algorithm> or smth
std::string bin;
for(unsigned i = 0; i != hex.length(); ++i)
bin += hex_char_to_bin(hex[i]);
return bin;
}

关于c++ - 在十六进制格式和二进制格式之间转换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18310952/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com