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

C 将二进制字符串转换为整数,c,int,strtol,C,Int,Strtol,当我尝试将二进制字符串转换为int时,我收到了一些我无法理解的错误。首先,我从一个文件中读取,转换时前导零没有显示,新行显示为零 我使用的代码来自以下问题: 我的txt文件和我期望的输出: 00000000 000000010001001000111010 00000000000000000000000000000001 101010111100110100110001001001000101 我得到的是: 0 0 70202 1 -1127017915 这一行: char* binary

当我尝试将二进制字符串转换为int时,我收到了一些我无法理解的错误。首先,我从一个文件中读取,转换时前导零没有显示,新行显示为零

我使用的代码来自以下问题:

我的txt文件和我期望的输出:

00000000

000000010001001000111010
00000000000000000000000000000001
101010111100110100110001001001000101
我得到的是:

0
0
70202
1
-1127017915
这一行:

char* binaryString[100];
正在声明一个包含100个字符指针(或100个字符串)的数组。您的意思可能是将100个字符的缓冲区声明为单个字符串:

char binaryString[100];
这一行:

char* binaryString[100];
正在声明一个包含100个字符指针(或100个字符串)的数组。您的意思可能是将100个字符的缓冲区声明为单个字符串:

char binaryString[100];

如果我理解正确,您希望将二进制字符串转换为十六进制字符串,即1和0,并将其转换为十六进制字符串,即0-F,如果是这样,则问题在于写入而不是转换,您将“%i”指定为写入值格式,您需要为十六进制指定“%x”


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

如果我理解正确,您希望将二进制字符串1和0转换为十六进制字符串0-F,如果是这样,问题在于写入而不是转换,您将“%i”指定为写入值格式,您需要为十六进制指定“%x”

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

//在这种情况下,如果要创建指针数组,请改用
charbinaryString[100]

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

//
101010111100110100110001001000101
是一个36位的数字,
int
(在大多数实现中)是32位的数字。使用
long-long
(在visual c++中为64位)作为类型,使用
strtoll
作为函数

printf("%i \n",value)
必须是
printf(“%lld\n”,值)

总之:

#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;
}
//在这种情况下,如果要创建指针数组,请改用
charbinaryString[100]

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

//
101010111100110100110001001000101
是一个36位的数字,
int
(在大多数实现中)是32位的数字。使用
long-long
(在visual c++中为64位)作为类型,使用
strtoll
作为函数

printf("%i \n",value)
必须是
printf(“%lld\n”,值)

总之:

#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;
}

strtol()
的第二个参数对于错误检测/恢复非常有用。“首先,我正在读取文件,前导零没有显示”-->为什么不显示前导零会被认为是一个问题?要获得与输入相同的精确输出文本,请使用
printf(“%s\n”,二进制字符串)
101010111100110100110001001000101
是一个36位的无符号数字。是否希望将其存储在小于37位的有符号整数中
int
通常为32位。
strtol()
的第二个参数对于错误检测/恢复很有用。“首先我从文件中读取,前导零没有显示”-->为什么不显示前导零会被认为是一个问题?要获得与输入相同的精确输出文本,请使用
printf(“%s\n”,binaryString)
101010111100110100110001001000101
是一个36位的无符号数字。是否希望将其存储在小于37位的有符号整数中
int
通常为32位。