Преобразование каждой цифры целого числа в соответствующие символы ASCII

Например, каким будет процесс преобразования целого числа 1023 в символы ascii

0x31 (1) 0x30 (0) 0x32 (2) 0x33 (3)

Не ищу никаких библиотечных функций (я знаю о Serial.print(), а что нет). Я пытаюсь последовательно передавать целое число на последовательный монитор, и я хотел бы знать, каким будет процесс, чтобы алгоритм принимал целое число и превращал каждую цифру в соответствующий символ ascii

, 👍2

Обсуждение

Это то, что вы пытаетесь сделать? http://www.cplusplus.com/reference/cstdlib/itoa/, @VE7JRO

Если вы ищете «реализация C++ itoa», вы можете найти примеры для этого, @chrisl

как насчет плавающего значения? можно преобразовать значение с плавающей запятой с помощью itoa ()?, @Norazlan K


2 ответа


Лучший ответ:

3

Чтобы преобразовать целое число в массив символов за один раз, используйте функцию itoa. Это похоже на то, что вам действительно нужно.

Чтобы преобразовать одну цифру из десятичной в ascii, просто добавьте '0', значение ascii для 0. Если вы просто хотите попытаться понять, что происходит, это что-то вроде этого.

char result[4] = {0};
int num = 345;

int digit = num % 10;  // получаем 5 от конечного
result[2] = digit + '0';  // преобразуем в ascii и сохраняем
num /= 10;   // избавляемся от 5
digit = num % 10;   // получаем 4 от конечного
result[1] = digit + '0';  // преобразовать в ascii и сохранить
num /= 10;   // избавиться от 4
digit = num % 10;   // получить 3 от конечного
result[0] = digit + '0';  // преобразовать в ascii и магазин

Serial.print(result);  // печатает "345"
,

0

Вот тестовый скетч с использованием iota().

int number = 1023;
const byte numberLength = 4;
char outputBuffer[numberLength + 1];

void setup(){

  Serial.begin(9600);

  itoa(number, outputBuffer, 10);

  for(byte i = 0; i < numberLength; i++){
    Serial.println(outputBuffer[i]);
  }
  Serial.println();

  for(byte i = 0; i < numberLength; i++){
    Serial.print("0x");
    Serial.println(outputBuffer[i], HEX);
  }

}

void loop(){}
,