嗨,我有一个看起来像这样的字符串:
std::string myString = "123456789";
有没有办法将十进制数的字符串转换为二进制数?
答案 0 :(得分:0)
如果你想将字符串解析为 int,你可以这样做:
std::string strDec = "123456789";
int i = std::stoi(strDec);
如果您想将 int 转换为字符串,但这次是用二进制表示,这是一种方法:
std::string strBin = std::bitset<32>(i).to_string();
或者,您可以使用 {fmt} 库:
#include <fmt/core.h>
int main() {
std::string strDec = "123456789";
std::string strBin = fmt::format("{:032b}", std::stoi(strDec));
}
答案 1 :(得分:0)
首先,您要将表示数字的字符串转换为实际的整数。
正如其他一些人所说:std::stoi
“string to int”。根据数字的大小,您可能需要使用 std::stoull
。这是同样的事情,但对于 long long
,一个 64 位整数。
接下来要将该数字转换回字符串。提供此功能的最容易使用的是 std::bitset
及其 to_string
成员函数。 bitset 的构造函数需要一个 unsigned long long,因此我们将使用 std::stoull
,即无符号变体。
这些都可以组合成一行代码:
myString = std::bitset<64>{ std::stoull(myString) }.to_string(); // 64 bits to fit a long long
执行此操作后,您将得到如下所示的字符串:0000000000000000000000000000000000000111010110111100110100010101
您可能想去掉前面的零。
我们可以使用字符串的 find
和 erase
myString.erase( 0, myString.find('1') );
这将删除从位置 0 到第一个 1 位置的所有字符。