将二进制字符串转换为整数

时间:2019-02-03 21:17:51

标签: c int strtol

当我尝试将二进制字符串转换为int时,遇到了一些我无法弄清的错误。首先,我正在从文件中读取内容,当我进行转换时,前导零不会出现,而新行将显示零。

我从以下问题中使用此代码:Convert binary string to hexadecimal string C

char* binaryString[100];

// convert binary string to integer
int value = (int)strtol(binaryString, NULL, 2);

//output string as int
printf("%i \n",value)

我的txt文件以及期望输出的内容:

00000000

000000010001001000111010
00000000000000000000000000000001
101010111100110100110001001001000101

我得到的是

0
0
70202
1
-1127017915

3 个答案:

答案 0 :(得分:2)

此行:

char* binaryString[100];

正在声明100个char指针(或100个字符串)的数组。您可能的意思是声明一个100个字符的缓冲区以解释为单个字符串:

char binaryString[100];

答案 1 :(得分:0)

如果我正确理解了这一点,那么您希望将一个二进制字符串(即1和0)转换为十六进制字符串(即0-F),如果是问题,那就是写入而不是转换,则将'%i'指定为书面价值格式,您需要为十六进制做的是指定'%x'

将此“ printf(”%i \ n“,value)”更改为“ printf(”%x \ n“,value)”

答案 2 :(得分:0)

char *binaryString[100]; 

///在这种情况下,您正在创建一个指针数组,请改用char binaryString[100]

int value = (int)strtol(binaryString, NULL, 2);

// 101010111100110100110001001001000101是一个36位数字,整数(在大多数实现中是32位)。使用long long(Visual c ++中为64位)作为类型,而使用strtoll作为函数。

printf("%i \n",value)

必须为printf("%lld \n", value)

总结:

    #include "stdio.h"
    #include "stdlib.h" // required for strtoll

    int main(void)
{
    char str[100] = "101010111100110100110001001001000101";
    long long val = 0;
    val = strtoll(str, NULL, 2);
    //output string as int
    printf("%lld \n", val);
    return 0;
}