0

Cを使用して1ビットのエラー検出を決定するために16進整数を使用する必要があるプログラムを作成しようとしています。しかし、Cが16進整数をどのように処理するかわかりません。まず、stdinから下位16ビットを抽出する必要があります。scanf()関数を使用してstdinから最初の16ビットを読み取り、その数値をcharの配列に格納する必要があります(私のコードは現時点ではこれを考慮していません)。プログラムをテストして整数を16ビット形式で出力するかどうかを確認するだけの場合、0xcd789fなどの16進数を入力すると、xの前に0が出力されるだけです。これが私のこれまでのコードです。これまでのところ、これは単なる標準の「stdinから整数を読み取り、それをstdoutに出力する」プログラムです。

#include <stdio.h>
int main()
{
    int num;

    scanf("%d", &num);  
    printf("%d\n", num);

    getchar();
}

このコードは、基数16の数値では正しく機能しません。これをどのように説明しますか?お手伝いありがとう!

4

2 に答える 2

2
scanf("%x", &num);  
printf("%x %d\n", num, num);

数値が2進数、8進数、10進数、16進数のいずれで表されていても、数値の値は同じままです。これは印刷によって示されます-数値の値を16進数(base16)形式および10進数形式で印刷します。

于 2013-03-08T19:11:15.127 に答える
1

フォーマット文字列で使用することに加えて、入力を変換するために使用%xできます。scanfstrtol

int num;
char buf[256];

if (fgets(buf, sizeof(buf), stdin) == 0) exit(0);
/* handles decimal, 0x prefix for hex, or 0 prefix for octal */
num = strtol(buf, 0, 0);
/* handles hex only, with or without 0x prefix */
num = strtol(buf, 0, 16);

他の場所で述べられているように、16進数で印刷するには、%x変換指定子を使用する必要があります。16進出力の文字を大文字にする場合は、%X代わりにを使用します。出力にプレフィックス0xまたは0Xプレフィックスを含める場合は#、変換指定子の修飾子を使用できます。

printf("hex: %x %#x\nHEX: %X %#X\ndec: %d\n", num, num, num, num, num);
于 2013-03-08T19:24:56.640 に答える