如何读取二进制数作为输入?

时间:2014-08-22 07:05:21

标签: c++ c input user-input c++14

用户有没有办法用C或C ++输入二进制数?

如果我们写点像

int a = 0b1010;
std::cout << a << std::endl

然后输出结果为10(使用适当的编译器扩展时)。

但是当我们尝试写

int n;
std::cin >> n;
int t = 0bn;

它给了我们一个错误,所以任何人都可以建议我们如何直接读取二进制数作为输入而不是使用字符串来存储输入?

4 个答案:

答案 0 :(得分:7)

这里有点混乱,让我们稍微解开它。

  • 0b1010是一个整数文字,一个用基数2写的常量编译时整数值。同样,0xA是基数为16的文字, 10位于基数为10. 所有这些都指向相同的整数,它只是告诉编译器您指的是哪个数字的另一种方式。在运行时,在内存中,此整数始终表示为base-2数字。

  • std::cout << a;取整数值a并输出它的字符串表示。默认情况下,它在基数10中输出,但您可以使用std::hex修饰符将其输出到基数为16. 没有预定义的修饰符以二进制打印。所以你需要自己做(或谷歌,这是一个常见的问题)。

  • 0b最后,用于定义整数文字。 运行时运算符。回想一下,所有int都表示为内存中的基数2。从机器的角度来看,其他基础不存在,intint,因此无需转换。如果你需要从一个字符串中读取一个二进制数,你可以将反向代码转换为打印它的代码(std::cin >> n假设输入是一个基数为10的数字,所以如果输入它会读取错误的数字实际上是打算在基地2)。

答案 1 :(得分:7)

虽然没有直接读取二进制数的函数,但有一些函数strtox(其中x表示数据类型)将包含二进制数(或任何其他基数)的字符串转换为数值。

所以解决方法是首先将数字作为字符串读取然后转换它。

示例:

char input[100];
char *endpointer;

<read input using either C or C++ syntax>

int n = (int) strtol(input, &endpointer, 2);

答案 2 :(得分:1)

而不是自己动手:

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    let token = String(format: "%@", deviceToken as CVarArg)
        .trimmingCharacters(in: CharacterSet(charactersIn: "<>"))
        .replacingOccurrences(of: " ", with: "")
}

答案 3 :(得分:0)

要以二进制数字作为输入,我经常使用两种方法:

主要提示:将输入作为字符串!!!使用:#include<string>

  1. 位集库的 to_ulong() 模板的bitset方法
    • 为此,您需要使用bitset
    • 包含 #include<bitset>

示例:

string s;
cin>>s; // Suppose s = "100100101"
int n = (int) bitset<64>(s).to_ulong();
cout<<n; // 293
  

进一步了解bitset hereto_ulong() here

  1. stoi() 库的string方法
    • 为此,您需要使用string
    • 包含 #include<string>

示例:

string s;
cin>>s; // Suppose s = "100100101"
int n = stoi(s, 0, 2);
cout<<n; // 293
  

探索stoi() here的格式。