memcpy — c ++; Является ли битсет решением для меня?

Я пишу программу и использую 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 байта. Сначала мне нужно добавить значение в следующие 3 бита txtBuffer который я сохранил в intи четвертый бит, который всегда равен 0. Далее мне нужно скопировать еще одно 12-битное значение, снова у меня есть это в int,

Таким образом, первое десятичное значение хранится в int между 0 и 7 включительно, то же самое верно для второго числа, о котором я упоминаю, чтобы войти в последние 12 бит. Сохраненное значение находится в пределах 2 ^ 12. Должен ли я, например, «бит-копия» последние три бита int в память, или объединить все эти значения вместе как-нибудь?

Есть ли способ, которым я могу скомпилировать эти три значения в 4 байта для копирования с помощью memcpy, или я должен использовать что-то вроде набора битов, чтобы копировать их поочередно?

Как мне решить эту проблему?

Спасибо.

0

Решение

Предполагая, что int составляет 4 байта на вашей платформе

int composed = 0;

int three_bits = something;
int twelve_bits = something_else;

composed = (three_bits & 0x07) | (1 << 3) | ((twelve_bits << 4) & 0xFFFFFF0);
1

Другие решения

Других решений пока нет …