###実現したいこと
C言語がfwriteしたintをNode.jsで読みたい。
###発生している問題
次のコードを見てください。
C言語がintの「789129」をfwriteしています。
C
1int main(){ 2 FILE* fp = fopen("hoge.dat", "w"); 3 int num = 789129; 4 fwrite(&num, sizeof(int), 1, fp); 5 fclose(fp); 6}
このプログラムを実行して得られたhoge.datをバイナリエディタで見ると、次のようになっていました。
00010203 04050607 08090A0B 0C0D0E0F 0000 890D0A0C 00
私の処理系では、sizeof(int)は4(32bit)を返します。
それなのに、ファイルには5バイトのデータが書き込まれています。
この数値を、例えばNode.jsのreadInt32LEを使って読もうとすると、当然おかしな数値が返ってきてしまいます。
諸事情により、C言語側のプログラムを修正することは出来ません。
何故5バイトのデータが書かれてしまうのか、またどのようにすればNode.jsでこのデータを解釈できるのか。
教えてほしいです。
####補足
この問題は常に起こるわけでは無いようです。
例えば「7891290」を先程のCのプログラムでfwriteしてみると、
00010203 04050607 08090A0B 0C0D0E0F 0000 5A697800
のようになっており、4バイトのデータが書き込まれています。
これはリトルエンディアンの32bitIntで「7891290」ですから、readInt32LEで読めるのですが…。
####Cのコンパイル環境
Win10(x64)で、gcc4.8.1を使っています。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/30 13:02