[当我尝试将二进制字符串转换为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
char *binaryString[100];
//在这种情况下,您正在创建一个指针数组,请改用char binaryString[100]
;
int value = (int)strtol(binaryString, NULL, 2);
// 101010111100110100110001001001000101
是一个36位数字,int
(在大多数实现中)是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;
}
此行:
char* binaryString[100];
正在声明一个由100个char指针(或100个字符串)组成的数组。您可能的意思是声明一个100个字符的缓冲区以解释为单个字符串:
char binaryString[100];
如果我正确理解了这一点,则您希望将一个二进制字符串(即一和零)转换为十六进制字符串,从而将其转换为0-F,如果是这样的问题是写而不是转换,则将'%i'指定为写入值格式,对于十六进制,您需要指定'%x'
将此“ printf(”%i \ n“,值)”更改为“ printf(”%x \ n“,值)”