Преобразование двоичной строки в целое число - PullRequest
0 голосов
/ 04 февраля 2019

Когда я пытаюсь преобразовать мою двоичную строку в int, я получаю пару ошибок, которые я не могу понять.Сначала я читаю из файла, и начальные нули не отображаются при преобразовании, а новая строка показывает ноль.

Этот код, который я использую из следующих вопросов: Преобразование двоичной строки в шестнадцатеричную строкуC

char* binaryString[100];

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

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

Мой текстовый файл и то, что я ожидаю в качестве вывода:

00000000

000000010001001000111010
00000000000000000000000000000001
101010111100110100110001001001000101

Что я получаю:

0
0
70202
1
-1127017915

Ответы [ 3 ]

0 голосов
/ 04 февраля 2019

Если я правильно понимаю это, вы хотите взять двоичную строку с единицами и нулями и преобразовать ее в шестнадцатеричную строку, чтобы 0-F, если это так, проблема с записью, а не преобразованием, вы указали «% i» какформат записанного значения, что вам нужно сделать для шестнадцатеричного значения, это указать '% x'

. Измените это "printf ("% i \ n ", value)" на "printf ("% x \ n ",значение) "

0 голосов
/ 04 февраля 2019
char *binaryString[100]; 

// Вы создаете массив указателей в этом сценарии, вместо этого используйте char binaryString[100];

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

// 101010111100110100110001001001000101 Это 36-битное число, int (в большинстве реализаций32 бит).вместо этого используйте long long (64 бит в Visual C ++) в качестве типа & 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;
}
0 голосов
/ 04 февраля 2019

Эта строка:

char* binaryString[100];

Объявляет массив из 100 указателей на символы (или 100 строк).Вы, вероятно, имели в виду это, чтобы объявить буфер из 100 символов, который будет интерпретироваться как одна строка:

char binaryString[100];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...