0

我正在试用一个将十进制数字转换为二进制的函数,我想看看它是否有效。问题是我用 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");

这将返回错误:错误:传递 'sprintf' 的参数 1 使指针从整数而不进行强制转换

4

1 回答 1

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;
}
于 2018-05-24T08:23:40.927 回答