- ベストアンサー
バイナリファイルの操作(配列の操作について)
こんにちは。 大変お世話になっております。 配列要素の先頭[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 のみにしたいと思っています。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
普通バイナリーデータをstrcat関数で結合しません。 memmoveやmemcpyなどでデータを移動させます。 ちなみに 2の後に3を行うということは、バイナリ-データの先頭6バイトを上書きしているのですがいいのですか?
その他の回答 (2)
- takataka65
- ベストアンサー率47% (48/102)
回答No.2
関数の意味をよく理解して使用しましょうね。 sprintf strcat はテキストで使用する関数です 関数リファレンスなどを片手に頑張って勉強して下さい。
質問者
お礼
ご指摘ありがとうございます。 再度熟慮、してみます。
- keibou21
- ベストアンサー率31% (18/58)
回答No.1
memmoveを使用されてはどうでしょうか。
質問者
お礼
memmoveにて解決することができました。 ありがとうございました。
お礼
memmoveを利用することで解決することができました。 ありがとうございました。
補足
書き込みありがとうございます。 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)と記述し、 テテテテテテバババババババ・・・・・ババババ テ:テキストデータ バ:バイナリデータ としています。