【问题标题】:converting a string of numbers to binary将一串数字转换为二进制
【发布时间】:2014-04-12 00:27:39
【问题描述】:

如果字符串是“8123”,我首先将字符串数字转换为整数形式 8123,然后将此数字发送到将其转换为二进制的函数。我得到的数字与 unsigned long long 一样大,但一旦通过,输出就错误了。有没有办法通过查看每个数字来转换为二进制。 即寻找 3、2、1 和 8 以转换为二进制。

So rather than taking the string "999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999" and turning it into a number, is there a way to look at each character in this string and turn it into binary?

非常感谢任何建议

【问题讨论】:

  • 不清楚你在问什么。也许您可以展示一些代码,或者至少展示您希望能够使用的代码,以便更好地说明您的意思。

标签: c++ string binary


【解决方案1】:

伪代码:

string binary_string = ""
#an example
number = 81

while (number != 0)
    #append the string casted value of the remainder of (number / 2) 
    #to the front of binary_string
    binary_string = str(number % 2) + binary_string
    number = number / 2

例如81:

binary_string = str(81 % 2) + binary_string = str(1) + "" = "1"

数字 = 81 / 2 = 40

binary_string = str(40 % 2) + binary_string = str(0) + "1" = "01"

数字 = 40 / 2 = 20

binary_string = str(20 % 2) + binary_string = str(0) + "01" = "001"

数字 = 20 / 2 = 10

binary_string = str(10 % 2) + binary_string = str(0) + "001" = "0001"

数字 = 10 / 2 = 5

binary_string = str(5 % 2) + binary_string = str(1) + "0001" = "10001"

数字 = 5 / 2 = 2

binary_string = str(2 % 2) + binary_string = str(0) + "10001" = "010001"

数字 = 2 / 2 = 1

binary_string = str(1 % 2) + binary_string = str(1) + "010001" = "1010001"

81 -> “1010001”

【讨论】:

  • 这与我所做的类似。但是,如果数字非常非常大,它会打印出错误的二进制文件。例如,我将 123123123123123123123123123 放入我的程序中,它会打印出错误的值。小整数打印正确
  • "123123123123123123123123123" 太大而无法放入 32 位整数,也太大而无法放入 64 位整数。
  • 我猜这就是为什么有办法查看字符串中的每个字符并以某种方式将其转换为二进制。我认为这应该允许处理大数字?
【解决方案2】:
string dec2bin(string in) {
    for(size_t i = 0; i < in.length(); i++)
        in[i] -= '0';
    string out;
    while(in.length()) {
        out.insert(0, 1, '0' + (in[in.length()-1]&1));
        char overflow = 0;
        if(in[0]<=1) {
            overflow = 10;
            in.erase(0);
        }
        for(size_t i = 0; i<in.length(); i++) {
            in[i] += overflow;
            overflow = 10 * (in[i]&1);
            in[i] /= 2;
        }
    }
    return out;
}

【讨论】:

  • 感谢重复数据删除器。不幸的是,当我试图编译它时,它给了我间接错误需要指针操作数('int'无效)*a = *a-'0';我对c++11也不熟悉,请问可以翻译成普通的c++吗?谢谢
  • 删除了所有高级 C++ 的东西。
  • 数字不能用 0 填充,尽管单独的 0 已正确转换。您已收到警告。
  • 0 填充是什么意思?它不包含 0?
  • 这意味着它不是“0”,而是以“0”-前缀开头。留给你解决。这应该很容易。
猜你喜欢
  • 2021-02-24
  • 2010-10-16
  • 1970-01-01
  • 1970-01-01
  • 2019-01-08
  • 2014-11-07
  • 1970-01-01
相关资源
最近更新 更多