0

同等のものが欲しいのですが

void print3( char a, uint8_t b, int8_t c )
{
    printf("%c %" PRIu8 " %" PRIi8 "\n", a, b, c);
}

システムコールを使用しwriteます。問題は、を使用して整数を出力する方法がわからないこと writeです。ANSI Cからのコマンドのみが許可され、sprintf文字列のフォーマットに使用することは禁止されています。

書き込みを使用する構文例:

const char msg[] = "Hello World!";
write(STDOUT_FILENO, msg, sizeof(msg)-1);

編集:私はsprintfどちらも使用することを許可されていませんitoa

4

4 に答える 4

2

数を考えてみましょう。それで155割ると百があり、余りは、で割ると10が得られ、余りはで割ると、それをあなたで割ると、が得られます。これらの番号1-5-5を連結して、最終的な番号を取得します。これで開始できます。100155105515

于 2012-11-03T13:53:13.603 に答える
1

印刷する数字の各桁は文字で表されます。

解決策には2つの要素があります。

  • 選択した基数の数値の桁を計算します。この場合は10と仮定します

  • 数字を文字に変換して書き込みます

桁を計算するステップでは、/and%演算子を使用します。これにより、数字が「逆」の順序で表示されるため、書き込む前に数字をリスする必要があります。

数字を文字に変換するには、単純な算術(ASCII文字値を使用)または配列ルックアップの2つのアプローチを検討してください。

于 2012-11-03T13:52:34.947 に答える
1

自分で変換する必要があります。以下のコードは、単純なASCIIではなくASCIIZ(C文字列)に変換されますが、使用可能です。

int ltoa(long x, char *str, size_t str_size)
{
    long y = 1;
    size_t i, s;
    for (s = 0; y < x; s++)
        y *= 10;
    if (str_size < s+1)
        return s+1;
    str[s--] = 0x0;
    while(s)
    {
            str[s--] = '0' + (x % 10);
            x /= 10;
    }
    str[0] = '0' + x;
    return 0;
}
于 2012-11-03T13:56:03.020 に答える
1

あなたはそれを知っていますか9(in ascii) == '0' + 9

char a =0;
a = '0';
printf("%c",a); //will print 0
a = '0' + 8; 
printf("%c",a);//will print 8

ここに画像の説明を入力してください

編集:

int a = 1234;

今それをchar* b:アルゴリズムに変換します:

for each digit in a:
   b.append(digit+'0')

これcharはのコンテナで8 bits == byteあり、数字、ASCIIの文字、または8ビット以内で表現したいものであれば何でもかまいません。

于 2012-11-03T13:57:52.313 に答える