C:将表示数字位的int数组转换为单个Int?

时间:2014-05-28 23:29:13

标签: c arrays integer

我是C的初学者,希望知道如何将表示数字位的数字数组转换为它所代表的整数。

我在网上搜索但只找到了char数组到int。

我正在制作转换器并需要int数组来将位值从1切换到0,反之亦然(即二进制)。到目前为止,我已设法使数组整数切换,但我无法弄清楚如何将数组数组更改为数组所代表的单个数字。我需要这个整数,所以我可以将它转换为用户可以查看的十进制数。

这有什么简单的解决方案吗?

bin =存储二进制数的整数变量

arrbin =整数数组,用于存储该位的状态,即(00000000)

            for (i = 0; i < 8; ++i )
                {
                bin = bin + (10 * arrbin[i]);
                }
编辑:我认为我现在看到的问题是,而不是每10个指数实现的值,数字只是乘以10.将尝试看看是否修复它。

编辑#2:我不是指将二进制转换为十进制。我的意思是将数字数组(即{1,0,0,0,0,0,0,1)转换为整数(整数变量= 10000001而不是129)

3 个答案:

答案 0 :(得分:3)

你基本上有答案,但你会从另一个方向做得更好,即:

int multiplier = 1;
for (i = 7; i >= 0; --i )
{
    bin += (multiplier * arrbin[i]);
    multiplier *= 10;
}

这样你就可以轻松改变你正在使用的数组的长度。

答案 1 :(得分:1)

如何手动完成,就像使用2的幂

将二进制转换为int一样
#include <stdio.h>
#include <string.h>

main()
{
   int arr[4]={1,0,0,1};
   int i;
   int output=0, power=1;
   for (i=0; i<4; i++)
   {

       output += arr[3-i]*power;
       power *= 2;
   }

   printf("%d\n", output);

在这个例子中

arr = 1 0 0 1
output = 1*2^0 + 0*2^1 + 0*2^2 + 1*2^3 = 9

答案 2 :(得分:1)

你忘记了二进制不能通过将值乘以 10 来工作,而是通过 2 (乘以10将是好的,你将转换为十进制数到一个int,但是已经存在函数。)

因此,如果我接受您的代码并应用适当的乘法:

for (bin = 0, i = 0; i < 8; ++i )
{
    bin *= 2;
    bin = bin + arrbin[i];
}

不是将bin的值乘以2,而是可以使用位移代替(将bin *= 2;替换为bin = bin << 1;)。

所有这些都假设arrbin数组包含有效值,而不是例如值的ASCII字符。如果是这种情况,则必须先将其转换为valld值,然后再将其添加到bin