• 締切済み

16進数?バイナリー?

今プログラムを書いているのですが、バイナリーデータを読み込んでいます。 データとしては、"24"や"FE"(16進数)などが入っているはずなのですが、charで読み込み表示すると"36"や"254"(10進数)となってしまいます。 "24"や"FE"で解析したいのですが、どうすればよろしいのでしょうか?

みんなの回答

  • rot-N
  • ベストアンサー率27% (118/432)
回答No.4

何が問題なのですか? 「00100100」とメモリに書かれている8ビットのデータを、貴方が10進数で表示したときに「36」と表示されただけでしょう? データそのものは、いつも、「00100100」です。 桁は長いし、0と1しかないので間違いやすいから、そんな表示をしないだけです。 16進数(これも4ビットずつ区切ると表示しやすいから使っているだけです。)で表示すると「0x24」、10進数で表示すると「36」(これがコンピュータにとっては意外と厄介(^^;))、8進数で表示すれば「044」(古いCPUの内部を見ている場合には8進数で表示してもらった方が楽です。)と、表示だけの問題です。printfで結果を表示する際に16進数で出したいだけなら、書式指定に%xを使えば良い。 で、そうすると0x24や、0xFEで「解析」ということ(?.?)が何を言っているのか、良く判らないですね。 データそのものはコンピュータの中に常に「00100100」で入っていますから、プログラムで何らかの処理を行った場合は、「00100100」に対して処理を行っていると思って下さい。

noname#105965
noname#105965
回答No.3

16進で表示するなら、"%x"で変換すればよいです。 プログラムソース上で値を16進で判断したいということですと、 if(ch == 0xFe || ch == 0x24) というように16進で比較可能です(キャストが必要かも・・・)。 ウォッチウィンドウでchをウォッチすると10進で表示されますが、 ch,x とすれば16進で表示されます。

noname#10173
noname#10173
回答No.2

ファイルの読み書き最小単位はバイトです。 内部の最小単位はビットです(0,1) 1バイトは8ビットです。 つまり2(1ビット)の8乗です 10進数でにすると0~255です。 (16進数でいうFFです。) charは、そのまま出力すると10進数で扱うので、 表示すると254とかになるのです。 16進数で表示したい場合は sprintf と エスケープシーケンスで検索して見てください。

参考URL:
http://search.goo.ne.jp/web.jsp?TAB=&MT=%A5%A8%A5%B9%A5%B1%A1%BC%A5%D7%A5%B7%A1%BC%A5%B1%A5%F3%A5%B9%A1%A1%A3%C3&web4.x=
  • nitscape
  • ベストアンサー率30% (275/909)
回答No.1

何のソフトを使って、どうやって解析したいかによって答え(方法)が異なります。 例えばVisual C++のIDEではウォッチウインドウの場合は、右クリックで16進数表示に切り替えることができます。

関連するQ&A

専門家に質問してみよう