dポイントプレゼントキャンペーン実施中!

こんにちは。

FILE *fp;
SIZE 1024;

int n;
char Buf[1025];

while((n = fread(Buf,1,SIZE,fp)) != 0){
}

というように、fread関数を用いて1024バイトずつ配列Bufへ格納しています。

以下に示すようなことを行う場合、どのように記述すればよいのでしょうか?

B:バイナリデータ
T:数値

TBBBBBBBBB・・・・・・B←1024バイト目
TBBBBBBBBB・・・・・・B




TBBBBBBBBB・・・・・・B

というように、配列内に格納したいと思っています。
Tは、テキストデータで1,2,3・・・・100という整数型を格納。Bは、バイナリデータでfread関数から取得したバイナリデータを格納します。

なぜ、Tを格納したいかといいますと、どのバイナリデータを指しているか?を判別するためです。

上記のようなことを行うためには、2次元配列を使用すればよいのでしょうか?
例:char Buffer[100][1025]

A 回答 (5件)

UDP…でしょうか?あまり詳しくないのでよくわかりませんが(再送は手動でやるんでしたっけ)


とにかくやりたい事は理解しました。

/***************************/
struct tempBuf{
int Number;
char Data[1024];
}

....中略.....

struct tempBuf test[100];
test[0].Number = 0;
strcpy(test[0].Data, "hellow world");

send(listen, &test[0], sizeof(test[0]), 0 );
/***************************/
↑これでテストしてみましたが上手い事出来たので
構造体でOKですね。(ソケット通信ですよね?)

仮に配列に直接通し番号を入れるなら受信側で
数値とデータを分けるルーチンが必要になります。
逆に言えばそれさえ作れば16進数でもasciiコードでも
適当に入れりゃいいんですけどね。
    • good
    • 0
この回答へのお礼

返信ありがとうございます
UDPソケットを利用しています。再送機構がないので、アプリケーションで実装を試みています。

大変分かりやすい説明ありがとうございました。

お礼日時:2006/11/13 19:36

おっしゃるとおり、2次元配列を使えばよいのではないでしょうか。


Tもいりませんし。
================================
FILE *fp;
SIZE 1024;

int n,i;
char Buf[100][1024];

for( i = 0;i < 100; i++){
while((n = fread(Buf[i],sizeof(char),SIZE,fp)) != 0){
}
}
================================
1次元目の配列の数値(0~99)がTにあたるので、それを使えばよいのでは?
    • good
    • 0
この回答へのお礼

返信ありがとうございます。
構造体で行うのか、2次元配列を用いるのか二つの方法を知ることができました。

ありがとうございました。

お礼日時:2006/11/13 15:30

構造体は分けて扱うという意味合いだったのですが


どうしても配列に格納したいと言う事ですね。
それでしたら普通に数字入れた後に読み込んだデータを追加したら
良いと思うのですが。
どういった所が解らないのでしょうか?

数字を配列に入れる

読み込んだデータを配列に追加する。

次の配列へ

この繰り返しでいけます。
あと念のためアウトプットの方法を示して下さい。


あ、もしかしてもしかするとデータを全部テキストで扱いたいって事ですか?

この回答への補足

返信ありがとうございます。

申し訳ありません。私が行いたいことは・・・
1.送信端末と受信端末を用意し、送信端末で100パケット(1パケット1024Byte)を受信端末へ送信します。その際、各パケットに通番を付加しておきます。

2.受信端末は送信端末からのパケットを受信し、通番を確認します。通番を確認した際に、未受信の通番を送信端末へ送信します。

3.送信端末は、受信端末から送信されてきた、通番(受信端末で取得することができなかったパケットの通番)を見て再度、その通番のパケットを送信します。

このように、動作1の時に、通番+fread関数で読み取った1024Byteのバイナリデータをメモリに格納しておきたいと思っています。←これが質問内容です。

herbestさんと#2の方がご提示してくださった、構造体と配列でしょうか?を利用した方法をとりたいと思います。

>あ、もしかしてもしかするとデータを全部テキストで扱いたいって事ですか?

通番はテキストデータ
パケット部はバイナリデータ
としたいと思っています。通番もバイナリデータとして扱ってよいのか分からないためです・・・

通番は、1,2,3・・・という数値型です。

よろしくお願いします。

補足日時:2006/11/13 13:59
    • good
    • 0

構造体の配列を用意すればよいです。


・配列の要素数は100
・構造体のメンバーは「1~100の連番用のエリア」と「バイナリーデータ用のエリア」
    • good
    • 0
この回答へのお礼

返信ありがとうございます。
構造体は、とても便利ですね・・・本日、そう思いました。

ポインタが、まだまだうまく理解できていませんが、今後とも勉強していくつもりです。

ありがとうございました。

お礼日時:2006/11/13 15:28

二次元配列でいけますが配列は1027バイトいりますよ。

(100で3バイト)

ただ、アウトプットをどうしたいのかによりますが
恐らく構造体を使って数値とデータを分けたほうが想像してる使い方が出来ると思います。

この回答への補足

返信ありがとうございます。

>恐らく構造体を使って数値とデータを分けたほうが想像してる使い方 >が出来ると思います。

struct tempBuf{
int 数値;
char Buf[1027];
}A_Buffer;

というような記述でしょうか?

1BBBBBBBB・・・・・B
2BBBBBBBB・・・・・B



100BBBBBBB・・・・・B
B:バイナリデータ
というように、配列内に格納したいと思っています。

上記の記述のような構造体であれば、上書きされてしまう恐れがあると思っているのですが・・・・

どのような記述方法があるか、わかりましたら教えて頂きたいと思っています。
よろしくお願いします。

補足日時:2006/11/13 12:48
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!