代码之家  ›  专栏  ›  技术社区  ›  david_10001

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

  •  0
  • david_10001  · 技术社区  · 7 年前

    我正在试用一个将十进制数转换为二进制数的函数,我想看看它是否有效。问题是我在用C语言写一个小微控制器,我没有很多基本的操作,比如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 回复  |  直到 7 年前
        1
  •  1
  •   theSealion    7 年前

    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 ou to ou 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;
    }
    
    推荐文章