1
ABCD0000
のようなデータを含むストリームからfscanfを符号なしのshortに変換したいとします。16進形式のscanfデータを符号なしのshortに変換する
どのようなフォーマット指定子が適切ですか?私はh
(短縮形)指定子で「符号なし」と「16進数」の両方を組み合わせる方法を見つけることができませんでした。
は、インスタンス
#include <stdio.h>
unsigned short hex_input;
unsigned char byte;
int main(void) {
scanf("%hX", &hex_input);
printf("%hX\n", hex_input);
byte = hex_input >> 8;
printf("%hu\n", byte);
byte = (char)hex_input;
printf("%hu\n", byte);
return 0;
}
とデータAB00
を見てみましょう。私は出力として得ることです:
AB00
65451
0
注二行目が間違っていることを、私は171
(AB
一部)を期待します。
はい、私はそれを試しました。改訂された質問をご覧ください。 – Flavius
バイトサイズの値に対して16ビット%huを印刷しています。 65451は16進数のFFABです。これは、あなたがリトルエンディアンアーキテクチャを採用していることと、より大きなオーダーのバイトでFFの迷惑メールを取得していることを示しています。または、自動的により広いタイプにキャストしています。 – Kaganar
ああ、私は 'unsigned 'の' byte'を見逃していました。 – Flavius