2

C/C++ で次のことを行う方法を正確に見つけることができません。

入力: 16 進値、例: ffffffffff...

入力を読み取るために、次のコードを試しました。

uint16_t twoBytes;
scanf("%x",&twoBytes);

これで問題なく動作しますが、2 バイトを 1 バイトの値に分割するにはどうすればよいですかuint8_t(または、最初のバイトのみを読み取ることもできます)。入力から最初のバイトを読み取り、選択した位置のバイト マトリックスに格納します。

uint8_t matrix[50][50]

私は C/C++ での入力の書式設定/読み取りにあまり熟練していないため (これまでは scanf しか使用していませんでした)、これを簡単に (できれば高速に) 行う方法に関する他のアイデアは大歓迎です。

編集: fread 関数を使用すると、ストリーム (この場合は stdin) から読み取って変数/配列に保存するバイト数を指定できるため、さらに優れた方法が見つかりました。

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );

パラメーター

ptr - 最小サイズが (size*count) バイトのメモリ ブロックへのポインター。

size - 読み取る各要素のバイト単位のサイズ。

count - 要素の数。それぞれのサイズは size バイトです。

stream - 入力ストリームを指定する FILE オブジェクトへのポインター。

cplusplus 参照

4

3 に答える 3

2

%x(特定のプラットフォームで同じである可能性があると考えたunsigned int)ではなく、を読み取ります。uint16_t

1バイトのみを読み取るには、次のことを試してください。

uint32_t byteTmp;
scanf("%2x", &byteTmp);
uint8_t byte = byteTmp;

これはを読み取りますがunsigned int、2文字を読み取った後に停止します(2つの16進文字は8ビットまたは1バイトに相当します)。

于 2009-02-04T19:42:32.330 に答える
0

次のように変数を分割できるはずです。

uint8_t LowerByte=twoBytes & 256;
uint8_t HigherByte=twoBytes >> 8;
于 2009-02-04T19:43:08.333 に答える
0

いくつかの考え:

1)それを文字として読み、手動で変換する-苦痛

2)4ヘキシットの倍数があることがわかっている場合は、2バイトで読み取ってから、high=2bytes<<8の1バイト値に変換できます。低=2バイト&FF;

3)%2x

于 2009-02-04T19:47:28.823 に答える