如何使用 memcpy 将数据从两个整数复制到字符数组

How can I use memcpy to copy data from two integers to an array of characters?

本文关键字:整数 两个 复制 数组 字符 memcpy 何使用 数据      更新时间:2023-10-16

我有一个文件,最多可以存储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

你在追求这样的事情吗?

memcpy(data + sizeof(int), &secondInteger, sizeof(int));

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