试图将二进制数连接成一个值

时间:2019-04-29 03:48:30

标签: c arrays binary concatenation

我试图通过将整数转换为字符串然后将它们转换回整数以将其放入一个字符串/整数来连接整数。我使用的是我从Google那里获得的连接示例,但它似乎不起作用,我也不知道为什么

我尝试了其他一些concat示例,但是它们也不起作用。还尝试了x * 10 x + y 由于我使用单位数字/二进制数字

这是我的concat函数

int concat(int a, int b)
{

    char s1[20];
    char s2[20];

    sprintf(s1, "%d", a);
    sprintf(s2, "%d", b);

    strcat(s1, s2);

    int c = atoi(s1);

    return c;
}

剩下的就是这

for (i = 0; i < countr+1; i++)
    {
        b = theArr[i];
        r = 0;
        count = 0;
        if (b < 0) 
        {
            tempval = (unsigned int)b;
            while (tempval != 0) 
            {
                n = tempval % 2;
                tempval /= 2;
                m[r] = n;
                count += 1; r++;

            }
            for (k = count - 1; k >= 0; k--) 
            {
                printf("%d", m[k]);
                if (tempC == 0) 
                {
                    testOutput = m[k];
                    tempC++;
                }
                else
                {
                    testOutput = concat(testOutput, m[k]);
                }
            }
            tempC = 0;
            printf("\nHERE:%d\n", testOutput);
            printf("\n");
        }else 
        {
            while (b != 0) 
            {
                n = b % 2;
                b /= 2;
                m[r] = n;
                count += 1; r++;

            }
            for (k = count - 1; k >= 0; k--) 
            {
                printf("%d", m[k]);
                printf("%d", m[k]);
                if (tempC == 0)
                {
                    testOutput = m[k];
                    tempC++;
                }
                else
                {
                    testOutput = concat(testOutput, m[k]);
                }
            }
            tempC = 0;
            printf("\nHERE:%d\n", testOutput);
            printf("\n");
        }
    }

在数组“ m”中,每个插槽中都有1或0。 我正在尝试将其添加在一起,例如 如果m [10] = {0,1,0,1,1,0,0,0,1,1}; “ testOutput”将为“ 0101100011”

我的浮动值是:271459.593750 然后吐出来:1240481687

编辑:theArr中有浮点数

1 个答案:

答案 0 :(得分:0)

简短的回答:您在atoi中越来越多了

假设您的系统具有32位int并使用2的补码表示形式,则可以存储在int中的最大值为2147483647。对于您想要的结果,最大值为1111111111 ,即10位数字。换句话说-当连接的字符串具有11个(或更多)数字时,atoi将不再产生预期的结果。

插入此打印

printf("concatenated string \"%s\" gives c=%d\n", s1, c);

return c;给出以下输出之前:

concatenated string "10" gives c=10
concatenated string "100" gives c=100
concatenated string "1000" gives c=1000
concatenated string "10000" gives c=10000
concatenated string "100001" gives c=100001
concatenated string "1000010" gives c=1000010
concatenated string "10000100" gives c=10000100
concatenated string "100001001" gives c=100001001
concatenated string "1000010010" gives c=1000010010
concatenated string "10000100100" gives c=1410165508  // Notice the overflow !!
concatenated string "14101655080" gives c=1216753192
concatenated string "12167531921" gives c=-717369967
concatenated string "-7173699671" gives c=1416234921
concatenated string "14162349210" gives c=1277447322
concatenated string "12774473220" gives c=-110428668
concatenated string "-1104286680" gives c=-1104286680
concatenated string "-11042866801" gives c=1842035087
concatenated string "18420350871" gives c=1240481687

HERE:1240481687

您可以尝试使用long long int代替int,并使用atoll代替atoi。这将帮助您存储一些额外的数字。