5

最大 8 バイトのデータを格納できるファイルがあります。

私は、ファイルから 8 バイトを取得し、RAM 内のバッファーに保存できるシステム (呼び出しは Sys1 にしましょう) を持っています。

これらの 8 バイトを使用して、その中にいくつかのものをコピーし、このシステムを使用して、「OK、これで完了です。これらのデータをファイルに送り返すだけです」と言うことができます。

私は 8 バイトをバッファに持ってきて、4 バイトを取る整数をバッファにコピーし、残りの 4 バイトに別の整数をコピーしたいと考えています。私は8バイトで2つの整数が欲しいだけで、それができると信じています。

私は4バイトだけをコピーすることができました。これはちょうど1つの整数であり、それをファイルに送り返すことができました。だから私はこのようなものを持っています:

     char *data;
     sys1.bring_the_8_bytes(&data);
    //now the 8 bytes are in the buffer,
    // data points to the first byte of the 8 byte  sequence
    int firstInteger = 10;
    int secondInteger = 20;
    //the two integers 
    memcpy(data,&firstInteger,sizeof(int));
    //now the values of the first integer have been copied successfully.
    sys1.send_the_8_bytes_back();

これでうまくいきます!ただし、最初の整数をコピーしてからすぐに2番目の整数をコピーする方法がわかりません。

最初の整数によって取得される最後のバイトの直後にある最初のバイトのアドレスを実際に知り、このアドレスを memcpy 呼び出しの宛先アドレスとして使用する必要があります。私の考えは正しいですか? もし、そうなら、

どうすればこれを達成できますか?? 希望するこのアドレスを見つけるにはどうすればよいですか?

前もって感謝します

4

3 に答える 3

8

計算に問題があるアドレスはsizeof(int)、既に持っているデータ ポインターを過ぎたバイト数です。を にキャストするだけでchar*int*書き込む有効な 8 バイト領域が常にあることがわかっているので、それを操作できます。

char *data;
sys1.bring_the_8_bytes(&data);
int *tmp = (int*)data;
tmp[0] = 10;
tmp[1] = 20;

または、char*(add sizeof(int)) に追加して、2 番目のmemcpy.

于 2012-04-11T21:50:18.143 に答える
3

あなたはこのようなものを求めていますか?

memcpy(data + sizeof(int), &secondInteger, sizeof(int));
于 2012-04-11T21:50:09.610 に答える
0

配列を気にせず、1 回の呼び出しで実行したい場合は、両方の整数を int 配列にコピーしてからファイルに書き込むことをお勧めします。

于 2012-04-12T13:43:14.967 に答える