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

时间:2018-05-24 03:08:55

标签: c type-conversion avr-gcc uint8t teensy

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

这会返回错误:错误:传递'sprintf'的参数1使得整数指针没有强制转换

1 个答案:

答案 0 :(得分: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功能。返回值与您返回的值不匹配。

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