• ベストアンサー

バイナリファイルの操作(配列の操作について)

こんにちは。 大変お世話になっております。 配列要素の先頭[0]から[5]までを文字列N、[6]から[1029]までをバイナリデータの計1030バイトの配列要素を使用しています。 [現在行なっている操作方法] 1. Buf[1500]とBuff[1500]を用意 2. fread関数により、Bufに1024バイトずつ格納 3. sprintf関数により、Buffの先頭[0]から[5]まで文字列挿入 4. strcat関数により、BuffとBufを結合 と言う形をとっています。 そこで、sprintfにて先頭から[5]までの文字列を挿入後、先頭から[5]までの配列要素を削除(不要になるため)し、バイナリデータのみにしたいのですが、何か方法はありますでしょうか? NNNNNNDDDDDDDDDDDDDDDDD・・・・・DDDDD←1029番 から NNNNNNを削除し、 DDDDDDD・・・・・DDDDD のみにしたいと思っています。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • clsdi99
  • ベストアンサー率63% (31/49)
回答No.3

普通バイナリーデータをstrcat関数で結合しません。 memmoveやmemcpyなどでデータを移動させます。 ちなみに 2の後に3を行うということは、バイナリ-データの先頭6バイトを上書きしているのですがいいのですか?

bird0214
質問者

お礼

memmoveを利用することで解決することができました。 ありがとうございました。

bird0214
質問者

補足

書き込みありがとうございます。 Buf_1[1500]とBuf_2[1500]を用意しています。(BufとBuffでは区別がつきづらいと思いBuf_1とBuf_2へと表現を変更します) >2の後に3を行うということは、バイナリ-データの先頭6バイトを上書きしているのですがいいのですか? 2. fread関数によって、Buf_1に1024バイトずつバイナリデータを格納 3. sprintf関数によって、Buf_2の先頭[0]から[5]までにテキストデータ(00001(スペース))を挿入 4. strcat(Buf_2,Buf_1)と記述し、 テテテテテテバババババババ・・・・・ババババ テ:テキストデータ バ:バイナリデータ としています。

その他の回答 (2)

回答No.2

関数の意味をよく理解して使用しましょうね。 sprintf strcat はテキストで使用する関数です 関数リファレンスなどを片手に頑張って勉強して下さい。

bird0214
質問者

お礼

ご指摘ありがとうございます。 再度熟慮、してみます。

  • keibou21
  • ベストアンサー率31% (18/58)
回答No.1

memmoveを使用されてはどうでしょうか。

bird0214
質問者

お礼

memmoveにて解決することができました。 ありがとうございました。

関連するQ&A