Задать вопрос
@Danilka2400

Как конвертировать из DEC в HEX ASCII?

У меня получилось конвертировать из HEX ASCII 31 34 в DEC это будет 14, потом я прибавил +1, получилось 15, теперь мне надо 1- 31 и 5 в 35 превратить и обратно в массив по байтам раскидать.

Вот этот пример кода работает:

char asciiHex[sizeof(kolchislo)];
        memcpy(asciiHex, kolchislo, 2); 
        
        int decValue = strtol(asciiHex, NULL, 16);
  
         // Добавление +1
        decValue += 1;
  • Вопрос задан
  • 253 просмотра
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 3
@res2001
Developer, ex-admin
Раз уж вы используете для преобразования в число strtol, то для обратного преобразования вполне можно использовать snprintf(asciiHex, sizeof(asciiHex), "%X", decVal).
Хотя эти операции достаточно простые, можно было бы легко реализовать самому оба варианта.

strtol ждет в первом параметре строку с завершающим нулем. У вас завершающий ноль в asciiHex отсутствует.
Kolchislo как объявлена? Это строка с завершающим нулем? Возможно стоит использовать strcpy, а не memcpy.
Зачем вам промежуточный массив asciiHex? Почему в strtol не использовать сразу kolchislo?
Ответ написан
@VT100
Embedded hardware & software.
itoa и atoi. Вроде, они есть в компиляторе, используемом Arduino IDE.
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
unsigned int str_to_uint(char *str) {
  unsigned int result = 0;
  while (*str != '\0') {
    result = result * 10 + *str - '0';
  }
  return result;
}

void uint_to_str(unsigned int val, char *buf, int bufsize) {
  unsinged int div = 1;
  while (val / div > 10) {
    div *= 10;
  }
  while (div > 0 && bufsize > 1) {
    *(buf++) = '0' + (val / div);
    val = val % div;
    div /= 10;
    bufsize -= 1;
  }
  *buf = '\0';
  return;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы