0

我正在编写一个程序并使用 memcpy 复制一些数据字节,使用以下代码;

#define ETH_ALEN 6
unsigned char sourceMAC[6];
unsigned char destMAC[6];
char* txBuffer;
....
memcpy((void*)txBuffer, (void*)destMAC, ETH_ALEN);
memcpy((void*)(txBuffer+ETH_ALEN), (void*)sourceMAC, ETH_ALEN);

现在我想将一些数据复制到这个缓冲区(txBuffer)的末尾,它小于一个字节或大于一个字节,所以它不是 8 的倍数(不会在整个字节边界上完成),所以memcpy()不能使用(我不相信?)。

我想再添加 16 位数据,大约 4 个字节。首先,我需要将一个值添加到txtBuffer我存储在 an 中的接下来的 3 位中int,以及始终为 0 的第四位。接下来我需要复制另一个 12 位值,我再次将它保存在 an 中int

所以存储在 anint中的第一个十进制值介于 0 和 7 之间,我提到的第二个数字也是如此,它进入最后 12 位。存储值在 2^12 范围内。例如,我应该将最后三位“位复制”int到内存中,还是应该如何将所有这些值合并在一起?

有没有办法可以将这三个值编译成 4 个字节以使用 memcpy 进行复制,或者我应该使用 bitset 之类的东西一次复制它们?

我应该如何解决这个问题?

谢谢你。

4

1 回答 1

1

假设 int 在您的平台上是 4 个字节

int composed = 0;

int three_bits = something;
int twelve_bits = something_else;

composed = (three_bits & 0x07) | (1 << 3) | ((twelve_bits << 4) & 0xFFFFFF0);
于 2012-10-29T17:19:48.780 回答