- 締切済み
16進数?バイナリー?
今プログラムを書いているのですが、バイナリーデータを読み込んでいます。 データとしては、"24"や"FE"(16進数)などが入っているはずなのですが、charで読み込み表示すると"36"や"254"(10進数)となってしまいます。 "24"や"FE"で解析したいのですが、どうすればよろしいのでしょうか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- rot-N
- ベストアンサー率27% (118/432)
何が問題なのですか? 「00100100」とメモリに書かれている8ビットのデータを、貴方が10進数で表示したときに「36」と表示されただけでしょう? データそのものは、いつも、「00100100」です。 桁は長いし、0と1しかないので間違いやすいから、そんな表示をしないだけです。 16進数(これも4ビットずつ区切ると表示しやすいから使っているだけです。)で表示すると「0x24」、10進数で表示すると「36」(これがコンピュータにとっては意外と厄介(^^;))、8進数で表示すれば「044」(古いCPUの内部を見ている場合には8進数で表示してもらった方が楽です。)と、表示だけの問題です。printfで結果を表示する際に16進数で出したいだけなら、書式指定に%xを使えば良い。 で、そうすると0x24や、0xFEで「解析」ということ(?.?)が何を言っているのか、良く判らないですね。 データそのものはコンピュータの中に常に「00100100」で入っていますから、プログラムで何らかの処理を行った場合は、「00100100」に対して処理を行っていると思って下さい。
16進で表示するなら、"%x"で変換すればよいです。 プログラムソース上で値を16進で判断したいということですと、 if(ch == 0xFe || ch == 0x24) というように16進で比較可能です(キャストが必要かも・・・)。 ウォッチウィンドウでchをウォッチすると10進で表示されますが、 ch,x とすれば16進で表示されます。
ファイルの読み書き最小単位はバイトです。 内部の最小単位はビットです(0,1) 1バイトは8ビットです。 つまり2(1ビット)の8乗です 10進数でにすると0~255です。 (16進数でいうFFです。) charは、そのまま出力すると10進数で扱うので、 表示すると254とかになるのです。 16進数で表示したい場合は sprintf と エスケープシーケンスで検索して見てください。
- nitscape
- ベストアンサー率30% (275/909)
何のソフトを使って、どうやって解析したいかによって答え(方法)が異なります。 例えばVisual C++のIDEではウォッチウインドウの場合は、右クリックで16進数表示に切り替えることができます。