我正在编写一个将二进制字符串转换为十进制的程序。在我真正开始使用此方法之前,我想验证输出。我有以下代码:
int get_val()
{
int sum =0;
for(int num_bits = size; num_bits>0; num_bits--)
{
printf("String sub %i is %i\n", num_bits, int(bin[num_bits]));
}
}
当我输入16个零的字符串时,我得到以下输出:
String sub 16 is 24
String sub 15 is 0
String sub 14 is 0
String sub 13 is 0
String sub 12 is 23
String sub 11 is 0
String sub 10 is 0
String sub 9 is 0
String sub 8 is 22
String sub 7 is 0
String sub 6 is 0
String sub 5 is 0
String sub 4 is 21
String sub 3 is 0
String sub 2 is 0
String sub 1 is 0
如果我输入全零,为什么我会打赌得到不同的值?
编辑:bin是“0000000000000000”
答案 0 :(得分:1)
只要问题没有更新,也许这个示例代码有帮助。它将二进制字符串转换为整数。我尽量保留你的代码和变量名。
#include <stdio.h>
#include <stdlib.h>
#include <string>
using namespace std;
int main() {
string bin = "000111010";
int size = bin.length();
int sum = 0;
for(int num_bits = 1; num_bits <= size; num_bits++) {
sum <<= 1;
sum += bin[num_bits - 1] - '0';
}
printf("Binary string %s converted to integer is: %i\n", bin.c_str(), sum);
}
正如评论中已经说过的,这里的主要技巧是将ASCII字符'0'和'1'转换为整数0和1,这是通过减去'0'的值来完成的。另外,我改变了字符串的遍历顺序,因为这样,你可以在每个位之后移位整数,并始终设置当前最低位的值。
答案 1 :(得分:0)
简短回答,你不会。
答案很长,这有一些问题。第一个大问题是,如果我们假设bin是长度为“size”的标准字符数组,则第一次打印无效。数组索引关闭1.考虑代码示例:
int size = 16;
char * bin = new char[size];
for(int i=0; i<size; i++)
{
bin[i] = 0;
}
for(int num_bits = size; num_bits>0; num_bits--)
{
printf("String sub %i is %i\n", num_bits, int(bin[num_bits]));
}
产生:
String sub 16 is -3
String sub 15 is 0
String sub 14 is 0
String sub 13 is 0
String sub 12 is 0
String sub 11 is 0
String sub 10 is 0
String sub 9 is 0
String sub 8 is 0
String sub 7 is 0
String sub 6 is 0
String sub 5 is 0
String sub 4 is 0
String sub 3 is 0
String sub 2 is 0
String sub 1 is 0
根据你得到的实际输出来判断,我猜你做了类似的事情:
int size=16;
int * ints = new int[size];
char * bin;
//Fill with numbers, not zeros, based on the evidence
for(int i=0; i<size; i++)
{
ints[i] = 20 + i;
}
//Copy over to character buffer
bin = (char*)(void*)&(ints[0]);
for(int num_bits = size; num_bits>0; num_bits--)
{
printf("String sub %i is %i\n", num_bits, int(bin[num_bits]));
}
这解释了你看到的完美输出。所以,我在想你的输入假设,bin指向一个字符零数组,是不正确的。假设你做了类似的事情,这有一些非常大的问题。