![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67b6d)
お世話になっています。
今、バイナリファイル(BSQフォーマット)を読み込むプログラムをC言語で書こうとしています。バイナリファイルの内容は数字(実数)の配列です。
そのバイナリファイルは、1数字につき2バイトしかなく、浮動小数点(float4バイトとdouble8バイト)などが使えませんでした。
なので、固定小数点なのかと思い、1バイトずつcharで読み込んだところ整数部分だけうまく読み込めました。しかし小数部分がうまくいきませんでした。
バイナリエディタで見たところ以下のようになっていました。
例:C2 FF(or 00) (この値が-62になることは分かっています。)
しかし、上記の方法で読み込んだ結果は-62 -1でした。
そこで質問なのですが、
(1)2バイトの実数を1バイトで区切って整数と小数に分けて行うことなどあるのでしょうか?
(2)上記の方法で行った場合、FFが-1になり、00も-1になってしまいます。本来なら小数部分のFFも00も値は0にならなければいけないのですが・・・。これは、どのように解決すればいいのでしょうか?
部分的に間違っている。根本的に間違っている。などなど
アドバイスよろしくお願いします。
No.1ベストアンサー
- 回答日時:
★補足要求
・2バイトの浮動小数点ってあるのですか?
・仮数部、指数部のビット長はどうなるのですか?
・浮動小数点の float、double が使えないって何?
・1ワードの(-62)は16進数では、0xFFC2 になります。
・そして、リトル・エンディアンで記録すると最下位のバイトから順番に
0xC2、0xFF とバイナリファイルに書き込まれます。
・本当に2バイトの浮動小数点なのですか?
・私は、ワード型(16Bit)の整数値の配列だと思いますが…。
・以上。補足要求します。
この回答への補足
さっそくありがとうございます。
>・2バイトの浮動小数点ってあるのですか?
>・浮動小数点の float、double が使えないって何?
2バイトの浮動小数点はないです。ただ、floatやdoubleは4バイト以上なので今回は使用できないっていう意味でした。
>・仮数部、指数部のビット長はどうなるのですか?
これについては、ちょっと分からないです。すいません。
>・そして、リトル・エンディアンで記録すると最下位のバイトから順番に0xC2、0xFF とバイナリファイルに書き込まれます。
>・1ワードの(-62)は16進数では、0xFFC2 になります。
エンディアンという考え方を恥ずかしいことに今知りました。
たしかに、上記の問題はエンディアンで考えると納得しますね。
>・本当に2バイトの浮動小数点なのですか?
>・私は、ワード型(16Bit)の整数値の配列だと思いますが…。
言われて見れば、浮動小数点ではおかしい部分が多い過ぎますね。
そのファイルに関するHPを見ていて、浮動小数点を使っているという記述があったので、それを見て早とちりしてしまったようです。。。
そこで、ファイルがリトル・エディアンで書かれているかどうかを確認したいのですが、
どのようにプログラムを書けばいいのでしょうか?
よろしくお願いします。
No.3
- 回答日時:
★アドバイス
・『リトル・エディアン』とか『ビッグ・エディアン』は CPU の種類で
決まっています。
・『Intel』系の CPU のパソコンでは『リトル・エディアン』方式で、
『Motorola』系の CPU のパソコンでは『ビッグ・エディアン』になります。
・プログラムから判定したい場合は、『0x1234』という整数をファイルに
書き込み、『char』型で1バイトずつ読み込みます。
・『0x12』→『0x34』と読み込んだら『ビッグ・エディアン』方式で
『0x34』→『0x12』と読み込んだら『リトル・エディアン』方式になります。
・『浮動小数点』は『仮数部』、『指数部』のビット長があって全体で
32ビットならば『float』型で、64ビットならば『double』型になります。
・以上。おわり。
参考URL:http://ertl.jp/~takayuki/readings/info/no05.html
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UTF-8で5~6バイトになる文字コ...
-
エクセルシート名の制限を変更...
-
10Mバイトて文字数に すると何...
-
機種依存文字をチェックしたい。
-
バイト列とバイナリ列の違いが...
-
char str[256]の256の意味は?
-
S-JISの2バイト文字をURLエン...
-
「1TB」のHDDに日本語は何字入...
-
ビットスワップとバイトスワッ...
-
半角、全角の判別方法
-
ソケット通信の受信サイズ
-
COBOLのCOMP形式について
-
テキストBOXの入力制限について
-
UCS-2の一覧表が欲しい
-
ワイド文字のバイト数が取得で...
-
3バイト文字(UTF-8)をprintfで...
-
VB.NET LeftBの代用
-
日付時刻を4バイトに
-
memcmp バイナリデータの比較方法
-
1バイト文字から2バイト文字に変換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
エクセルシート名の制限を変更...
-
char str[256]の256の意味は?
-
COBOLのCOMP形式について
-
バイト列とバイナリ列の違いが...
-
ビットスワップとバイトスワッ...
-
VBAでShift-JISのURLエンコード
-
ピクセル,dpiから容量(バイト...
-
「1TB」のHDDに日本語は何字入...
-
SQLで1バイト、2バイト混在...
-
バイナリとBCDコード
-
Javaで日本語1文字のバイト数
-
UCS-2の一覧表が欲しい
-
3バイト文字(UTF-8)をprintfで...
-
:(コロン)のKeyCode
-
【VB2005】テキストボックス内...
-
URLは最高何文字まで可能なので...
-
64bit対応
-
機種依存文字をチェックしたい。
おすすめ情報