Я пишу программу и использую 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, или я должен использовать что-то вроде набора битов, чтобы копировать их поочередно?
Как мне решить эту проблему?
Спасибо.
Предполагая, что int составляет 4 байта на вашей платформе
int composed = 0;
int three_bits = something;
int twelve_bits = something_else;
composed = (three_bits & 0x07) | (1 << 3) | ((twelve_bits << 4) & 0xFFFFFF0);
Других решений пока нет …