【发布时间】:2021-11-18 07:32:05
【问题描述】:
对于我的项目,我需要转换一些数字,例如:
- 二进制 --> 十进制
- 十进制-->二进制
- 二进制 --> 十六进制
- 十六进制 --> 二进制
- 等等……
我尝试创建一些函数,但它的操作时间很长,我立即需要一个转换器。
有人知道这样做的图书馆,那么,我在哪里可以找到它。
【问题讨论】:
-
不清楚是否需要转换数字或字符串。
标签: c++ converters
对于我的项目,我需要转换一些数字,例如:
我尝试创建一些函数,但它的操作时间很长,我立即需要一个转换器。
有人知道这样做的图书馆,那么,我在哪里可以找到它。
【问题讨论】:
标签: c++ converters
您可以使用 stoi 函数将二进制/十六进制/八进制格式的值转换为十进制数:
#include <iostream>
#include <string>
int main() {
std::string hex("BAF");
std::string bin("1111");
std::string octal("734");
std::cout << "Hex: " << hex << " => " << std::stoi(hex, 0, 16) << std::endl;
std::cout << "Bin: " << bin << " => " << std::stoi(bin, 0, 2) << std::endl;
std::cout << "Octal: " << octal << " => " << std::stoi(octal, 0, 8)
<< std::endl;
}
对于其他转换(从十进制到二进制/十六进制/八进制),您应该实现自己的函数。您可以使用 std::bitset 来帮助您。
【讨论】:
涉及字符串和数字的一些步骤示例
#include <iostream>
#include <bitset>
#include <cassert>
#include <string>
#include <sstream>
int main()
{
auto binary = std::stoi("0110", nullptr, 2);
auto hex = std::stoi("f", nullptr, 16);
assert(binary == 6);
assert(hex == 15);
std::stringstream os;
os << std::hex << hex; // todo add formatters.
std::cout << os.str() << std::endl;
std::bitset<4> bits{ binary };
std::cout << bits.to_string() << std::endl;
return 0;
}
【讨论】: