

現在,バイナリのデータを処理するプログラムを作成しています。
おおまかに言えば,ファイルA(バイナリモードでオープン)からバイナリでデータを読み込んできて,そのデータを処理してファイルB(バイナリモードでオープン)に書出す,のようなプログラムです。
その処理したデータを入れるデータ型にunsigned long long int型(64bit)を使用しています。
その処理データをファイルBに書出す時に,fwrite関数を用いています(例参照)。
(例)
for(i=0; i<N; i++){
fwrite(&c[i], sizeof(c[i]), 1, fp);
}
//配列cが「unsigned long long int型」です。
//配列cは最初に"0"で初期化しています。
//fpはファイルポインタです。
しかし,本システムでunsigned long long int型が実際に使用しているのは下位32bitです。
上の例で書出した場合,上位32bitの"0"も書出されていることになるのでしょうか。
書出されたファイルのサイズを見れば,64bit全て書出されているようですが,計算間違いで32bitを超えたところまで何かデータが入っている可能性もあります。
どなたはfwrite関数に詳しい方,ご回答をよろしくお願いします。
No.1ベストアンサー
- 回答日時:
sizeof(c[i])が8ですから、8バイト(64bit)かかれます。
4バイト(32bit)だけ書きたいなら、
fwrite(&c[i],4,1,fp);
No.5
- 回答日時:
#4です。
ファイルにどのように書かれているかは、バイナリエディタで調べればわかります。
こちらに各種ありますから、お好みのものを使って調べてください。
http://www.vector.co.jp/vpack/filearea/win95/uti …
参考URL:http://www.vector.co.jp/vpack/filearea/win95/uti …
No.4
- 回答日時:
>実際に使用しているのは下位32bitです
それなら、long型を使えばよさそうですが??
>上位32bitの"0"も書出されていることになるのでしょうか。
そうです。64ビットの数値領域をそのまま書き出しています。
>計算間違いで32bitを超えたところまで何かデータが入っている可能性もあります。
ご質問の趣旨は、こういう場合には上位32ビットをクリアしたいということで
しょうか? それなら c[i] &= 0xffffffff; を行なってから書き出せば
いいかと思います。
いずれにしても、あまりfwrite()には関係がないと思いますが...
No.3
- 回答日時:
#2さんの回答ですが、
fwrite((char*)&c[i]+4,4,1,fp);
のようにキャストする必要があるかと思います。
また、longが32bitの場合、
for(i=0; i<N; i++){
unsigned long tmp;
tmp = (unsigned long)c[i];
fwrite(&tmp, sizeof(tmp), 1, fp);
}
のようにすればエンディアンに依存しないはずです。
どちらにしろ処理系依存にはなりますが…。
No.2
- 回答日時:
#1です。
書き忘れ。変数の半分だけ書くわけなので、endianというのが関係してきます。下位バイトを下位アドレスに入れるのがlittle-endianで、Windos等intel系システムならさっきの回答の通りですが、上位バイトを下位アドレスに入れるbig-endianの場合は、
fwrite(&c[i]+4,4,1,fp);
関数を使ってどちらの場合でも共通のソースにすることもできますけど、どうせ機種依存のプログラムでしょうからこれでいいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C言語について教えて欲しいです。 ファイルの中身をコピーするプログラムを作ってます aというファイル 7 2022/11/03 19:21
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッファとは何ですか
-
Microsoft VBAで2GBを超えるフ...
-
エラー:ストリームの終わりを...
-
入力ファイルをバイナリにする利点
-
【python】Excelファイルを読み...
-
関数の容量を知るには?
-
VBScriptでメタデータを取得したい
-
VBAを使って、一部バイナリデー...
-
EOF
-
EXCEL VBAで、バイナリデータの...
-
RS232Cを用いたSCIでのシリアル...
-
DXFファイル用クラスライブラリ...
-
wave形式(*.wav)のフォーマット...
-
バイナリデータ処理
-
ページ読み込み時に自動的にsub...
-
デバイスファイルに書き込むこと
-
バイナリファイルの検索について
-
EXCEL VBAでテキストファイルの...
-
エクセルVBA 2千万行のCSVファ...
-
画像の保存方法。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッファとは何ですか
-
Microsoft VBAで2GBを超えるフ...
-
EXCEL VBAでテキストファイルの...
-
VBA バイナリ―から文字列にす...
-
エラー:ストリームの終わりを...
-
ページ読み込み時に自動的にsub...
-
EOF
-
エクセルVBA 2千万行のCSVファ...
-
入力ファイルをバイナリにする利点
-
【Teraterm】filewritelnについて
-
【python】Excelファイルを読み...
-
EXCEL VBAで、バイナリデータの...
-
FTPでエクセルをPUTするとファ...
-
テキストデータをSQLServerに取...
-
C言語とシリアル通信の送受信...
-
ビットマップファイル生成(C言...
-
pcxファイルを開きたい(RGBデ...
-
FTPを使わないファイルアップロ...
-
MacからWinにファイルを添付す...
-
HDDのバイナリイメージの取得方...
おすすめ情報