Как отобразить uint8_t как целое число или строку? - PullRequest
0 голосов
/ 24 мая 2018

Я испытываю функцию, которая преобразует десятичные числа в двоичные, и я хочу посмотреть, работает она или нет.Проблема в том, что я пишу это на C для микроконтроллера Teensy, и у меня нет многих базовых операций, таких как printf.Я использую библиотеку, которая может отправлять информацию на ЖК-экран только в виде строки или двойной строки, поэтому мой единственный способ проверить, работает ли эта функция, - отправить двоичное число на ЖК-экран в виде строки или целого числа (если двоичный файлчисло было 1010, целое число было бы 1010, а не 10).

Библиотеки, которые я могу использовать:

stdint
stdio
avr/io
avr/interrupt
util/delay
stdlib

Кто-нибудь знает, как это можно сделать, используя только перечисленные выше библиотеки?

РЕДАКТИРОВАТЬ: Включенный код согласнозапрос комментария.Код, который я использовал для преобразования десятичного числа в двоичный:

uint8_t dec_to_bin(void){
    int n = 100;
    long long binaryNumber = 0;
    int remainder, i = 1;

    while (n!=0){
        remainder = n%2;
        n /= 2;
        binaryNumber += remainder*i;
        i *= 10;
    }
    return binaryNumber;
}

Затем в основной функции у меня есть:

uint8_t a = dec_to_bin();
sprintf(a, "%u");

Возвращает ошибку: ошибка: передача аргумента 1 из'sprintf' делает указатель из целого числа без приведения

1 Ответ

0 голосов
/ 24 мая 2018

Определение для sprintf:

int sprintf ( char * str, const char * format, ... );

Так что, если вы хотите преобразовать ваше число в строку (и это то, что делает sprintf), вы должны дать ему массив char, куда поместить строку:

char output[9];
uint32_t a = dec_to_bin(100);

sprintf(output, "%08lu", a);

Это должно решить вашу ошибку компиляции.

Вторая проблема - ваша функция dec_to_bin.Возвращаемые значения не совпадают со значением, которое вы возвращаете.

uint32_t dec_to_bin( uint32_t n ){

    uint32_t binaryNumber = 0;
    uint32_t remainder, i = 1;

    //prevent overflow
    if ( n > 255) {
        return 0;
    }

    while (n!=0){
        remainder = n%2;
        n /= 2;
        binaryNumber += remainder*i;
        i *= 10;
    }
    return binaryNumber;
}
...