C / C ++は、標準入力からhexinputからバイトを読み込みます
質問
正確にC / C ++で次の操作を行う方法についての方法を見つけることができません。
入力:hexdecimal値、例えば:ffffffffff ...
私は入力を読み取るために、次のコードを試してみた:
uint16_t twoBytes;
scanf("%x",&twoBytes);
ザッツは罰金と、すべての動作しますが、どのように私は1bytes uint8_t
値(または多分最初のバイトだけを読んで)で2バイトを分割します。入力から最初のバイトを読み、選択の位置でバイト行列に保管したいと思います。
uint8_t matrix[50][50]
私は整形では非常に熟練していないよので/ C / C ++(とのみ、これまでscanf関数を使用していた)(それが行く場合と高速)簡単にこれを行う方法上の任意の他のアイデアに入力から読み込むことは非常に高く評価されます。
編集:それは1が、それはストリーム(この場合は標準入力)から読み込み、変数/配列に保存する必要がありますどのように多くのバイト数を指定することができますようにfread関数を使用して、より良い方法を見出し
。size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
パラメータ
PTR - (サイズ*数)バイトの最小サイズを有するメモリのブロックへのポインタ
サイズ - 。読み出される各要素のサイズ(バイト単位)
カウント - 要素の数、サイズバイトのサイズを持つそれぞれを
ストリーム - 入力ストリームを指定するファイルオブジェクトへのポインタ。
解決
%x
はunsigned int
を読み込み、ないuint16_t
は(彼らはあなたの特定のプラットフォーム上で同じであってもよいと思った)。
1バイトのみを読み取るには、これを試してください:
uint32_t byteTmp;
scanf("%2x", &byteTmp);
uint8_t byte = byteTmp;
これはunsigned int
を読み取るが、2つの文字を(二進文字は8ビットまたは1バイトに等しい)。
他のヒント
あなたはこのような変数を分割することができるはずです
uint8_t LowerByte=twoBytes & 256;
uint8_t HigherByte=twoBytes >> 8;
の考えのカップルます:
1)文字として、それを読み、それを手動で変換 - 痛い
あなたが4 hexitsの倍数があることがわかっている場合は、2)、あなただけtwobytesに読み、その後、高=のtwobytes << 8で1バイトの値に変換することができます。低= twobyets&FF;
3)%2X