Преобразование массива char в int с помощью strtol() в C
У меня проблемы с функцией strtol () в C, вот фрагмент кода того, как я пытаюсь использовать его
char TempChar;
char SerialBuffer[21];
char hexVoltage[2];
long intVoltage;
do
{
Status = ReadFile(hComm, &TempChar, sizeof(TempChar), &NoBytesRead, NULL);
SerialBuffer[i] = TempChar;
i++;
}
while (NoBytesRead > 0);
memcpy(hexVoltage, SerialBuffer+3, 2);
intVoltage = strtol(hexVoltage, NULL, 16);
Итак, вопрос в том, почему strtol () возвращает 0? И как мне преобразовать массив значений char в шестнадцатеричном формате в int (long в данном конкретном случае)? hexVoltage в моем случае содержит {03, 34} после memcpy(). Заранее спасибо. Очень ценю помощь здесь.
1 ответ
strtol
и друзья ожидают, что вы предоставите им печатное представление числа в формате ASCII. Вместо этого вы предоставляете ему двоичную последовательность, которая читается из файла (порта).
В этом случае ваш intVoltage
может быть вычислено путем объединения двух байтов чтения в 2-байтовое число с побитовыми операциями, в зависимости от порядка следования этих чисел на вашей платформе:
uint8_t binVoltage[2];
...
uint16_t intVoltage = binVoltage[0] | (binVoltage[1] << 8);
/* or */
uint16_t intVoltage = (binVoltage[0] << 8) | binVoltage[1];