0

10 進数を 2 進数に変換する関数を試していますが、機能しているかどうかを確認したいと考えています。問題は、Teensy マイクロ コントローラー用に C で記述していて、printf のような基本的な操作があまりないことです。LCD 画面に文字列または double としてのみ情報を送信できるライブラリを使用しているため、この関数が機能しているかどうかを確認する唯一の方法は、2 進数を文字列または整数 (バイナリの場合) として LCD 画面に送信することです。 number が 1010 だった場合、整数は 10 ではなく 1010 になります)。

私が使用できるライブラリは次のとおりです。

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

上記のライブラリのみを使用してこれを行う方法を知っている人はいますか?

編集:コメントリクエストに従ってコードを含めました。10 進数を 2 進数に変換するために使用したコードは次のとおりです。

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

これでコンパイルエラーが解決するはずです。

2 番目の問題は、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 に答える