我有一个文件,最多可以存储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调用中的目标地址,我的想法正确吗?如是,
我怎样才能做到这一点?如何找到我想要的地址?
提前致谢
最佳答案
您在计算时遇到问题的地址只是您已经拥有的数据指针之后的sizeof(int)
字节。您可以将char*
转换为int*
并使用该格式,因为您知道自己始终有一个有效的8字节区域要写入。
char *data;
sys1.bring_the_8_bytes(&data);
int *tmp = (int*)data;
tmp[0] = 10;
tmp[1] = 20;
或者,您可以只添加到
char*
(添加sizeof(int)
)并执行第二个memcpy
。