5

我有一个最多可以存储 8 个字节数据的文件。

我有一个系统(我们称之为 Sys1),它可以从文件中获取 8 个字节并将其保存在 ram 内的缓冲区中。

我可以使用这 8 个字节并在其中复制一些内容,然后使用这个系统说“好的,我已经完成了,只需将这些数据发送回文件”。

我想将 8 个字节带入缓冲区,将一个整数复制到其中,这需要 4 个字节,然后在剩余的 4 个字节上复制另一个整数。我只想要 8 个字节的两个整数,我相信这是可以做到的。

我设法只复制了 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();

现在这工作正常!但是我不确定如何复制第一个整数,然后立即复制第二个。

我实际上应该知道第一个字节的地址正好在第一个整数占用的最后一个字节之后,然后在 memcpy 调用中将此地址用作目标地址,我的想法是否正确?如是,

我怎样才能做到这一点?我怎样才能找到我想要的这个地址?

提前致谢

4

3 回答 3

8

您在计算时遇到问题的地址只是sizeof(int)您已经拥有的数据指针的字节数。您可以将其char*转换为 anint*并使用该视图,因为您知道您始终有一个有效的 8 字节区域可以写入。

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

或者您可以添加到char*(add sizeof(int)) 并执行第二个memcpy.

于 2012-04-11T21:50:18.143 回答
3

你在追求这样的事情吗?

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

如果您不介意数组并想在一次调用中完成,我建议您将两个整数都复制到一个 int 数组中,然后写入文件。

于 2012-04-12T13:43:14.967 回答