将二进制字符串转换为整数
Converting a binary string to integer
当我尝试将我的二进制字符串转换为 int 时,我收到了一些我无法弄清楚的错误。首先,我正在从一个文件中读取,当我转换时,前导零没有出现,新行显示为零。
我在这个问题中使用的代码:
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];
正在声明一个包含 100 个字符指针(或 100 个字符串)的数组。你的意思可能是声明一个 100 个字符的缓冲区被解释为一个字符串:
char binaryString[100];
如果我理解正确,你想把一个二进制字符串 so ones 和 zeros 转换成十六进制字符串 so 0-F,如果是这样,问题出在 Write 而不是 Convert,你指定了'%i ' 作为写入值格式,您需要为十六进制做的是指定 '%x'
将此 "printf("%i \n",value)" 更改为 "printf("%x\n",value)"
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;
}
当我尝试将我的二进制字符串转换为 int 时,我收到了一些我无法弄清楚的错误。首先,我正在从一个文件中读取,当我转换时,前导零没有出现,新行显示为零。
我在这个问题中使用的代码:
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];
正在声明一个包含 100 个字符指针(或 100 个字符串)的数组。你的意思可能是声明一个 100 个字符的缓冲区被解释为一个字符串:
char binaryString[100];
如果我理解正确,你想把一个二进制字符串 so ones 和 zeros 转换成十六进制字符串 so 0-F,如果是这样,问题出在 Write 而不是 Convert,你指定了'%i ' 作为写入值格式,您需要为十六进制做的是指定 '%x'
将此 "printf("%i \n",value)" 更改为 "printf("%x\n",value)"
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;
}