如何将 uint8_t 显示为整数或字符串?

How to display a uint8_t as an integer or string?

我正在试用一个将十进制数转换为二进制数的函数,我想看看它是否有效。问题是我正在用 C 为 Teensy 微控制器编写它,而且我没有很多像 printf 这样的基本操作。我正在使用一个只能将信息作为字符串或双精度发送到 LCD 屏幕的库,所以我检查此函数是否有效的唯一方法是将二进制数作为字符串或整数发送到 LCD 屏幕(如果二进制number 是 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");

这个 returns 错误:错误:传递 'sprintf' 的参数 1 从没有转换的整数中生成指针

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 函数。 return 值与您正在 return 的值不匹配。

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;
}