Arduino char массив в целочисленное значение - PullRequest
0 голосов
/ 27 января 2019

Глупый вопрос здесь:

Я пытаюсь преобразовать массив символов в целое число.Это мой случай (извлечено из основного кода, я просто его определил ..):

int val;
char *buff;
uint8_t v1 = 2;
uint8_t v2 = 25;

buff[0] = v1;
buff[1] = v2;
val = strtol(buff, NULL, 16);

В этой ситуации val всегда возвращает «0», но если я заменю «buff» на «0x225», он возвращает ожидаемое значение 549.

Что я делаю не так?Спасибо заранее ..

1 Ответ

0 голосов
/ 27 января 2019

вам нужно выучить C (на самом деле C ++, так как Arduino запрограммирован на C ++).

strtol преобразует строки в числа.

строка в C - это массив элементов char, заканчивающихся на ноль (не '0', а 0).Таким образом, «0x225» - это массив {'0', 'x', '2', '2', '5', 0}

'2', а не число 2.Это ASCII-представление char '2' с десятичным числом 50.

buff[0] = '0';
buff[1] = 'x';
buff[2] = '2';
buff[3] = '2';
buff[4] = '5';
buff[5] = 0;

val = strtol(buff, NULL, 16);


buff[0] = 48;
buff[1] = 120;
buff[2] = 50;
buff[3] = 50;
buff[4] = 53;
buff[5] = 0;

val = strtol(buff, NULL, 16);

В вашем коде много других проблем.Вам нужно понять, что такое 25 и что такое 0x25 (они не равны).Вы должны начать с книги и компилятора ПК и изучать язык из самых простых вещей.

...