2012-03-09 6 views
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 

注二行目が間違っていることを、私は171AB一部)を期待します。

答えて

3

まだhxである必要があります。 (16進数はデフォルトでは符号なしとして扱われます)また、ABCD0000の例では、符号なしのshortに読み込まれる4つの小さいニブルだけがあるので、値は0になります。

+0

はい、私はそれを試しました。改訂された質問をご覧ください。 – Flavius

+0

バイトサイズの値に対して16ビット%huを印刷しています。 65451は16進数のFFABです。これは、あなたがリトルエンディアンアーキテクチャを採用していることと、より大きなオーダーのバイトでFFの迷惑メールを取得していることを示しています。または、自動的により広いタイプにキャストしています。 – Kaganar

+0

ああ、私は 'unsigned 'の' byte'を見逃していました。 – Flavius

関連する問題