如何在C++中将一串数字转换为二进制?

时间:2021-05-17 09:10:12

标签: c++ string binary bitset

嗨,我有一个看起来像这样的字符串:

std::string myString = "123456789";

有没有办法将十进制数的字符串转换为二进制数?

2 个答案:

答案 0 :(得分:0)

如果你想将字符串解析为 int,你可以这样做:

std::string strDec = "123456789";
int i = std::stoi(strDec);

如果您想将 int 转换为字符串,但这次是用二进制表示,这是一种方法:

std::string strBin = std::bitset<32>(i).to_string();

Demo


或者,您可以使用 {fmt} 库:

#include <fmt/core.h>

int main() {
  std::string strDec = "123456789";
  std::string strBin = fmt::format("{:032b}", std::stoi(strDec));
}

Demo

答案 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 您可能想去掉前面的零。 我们可以使用字符串的 finderase

myString.erase( 0, myString.find('1') );

这将删除从位置 0 到第一个 1 位置的所有字符。