Как скопировать память

Скажите, что у меня есть:

unsigned char *varA, *varB, *varC; varA=malloc(64); varB=malloc(32); varC=malloc(32); 

Как я могу поместить первый 32 байт varA в varB и последний 32 байт varA в varC?

 memcpy(varB, varA, 32); memcpy(varC, varA + 32, 32); 

Это просто, потому что базовый тип данных – это unsigned char , размер которого равен байту. Если varA , varB и varC были целыми числами, вам нужно было бы умножить параметр размера на memcpy (т.е. 32) на sizeof(int) чтобы вычислить нужное количество байтов для копирования. Если бы я был педантичным, я мог бы умножить 32 на sizeof(unsigned char) в приведенном выше примере, но это необязательно, потому что sizeof(unsigned char) == 1.

Обратите внимание, что мне не нужно умножать 32 в varA + 32 на что-либо, потому что компилятор делает это для меня при добавлении постоянных смещений в указатели.

Еще одна вещь: если вы хотите быть быстрым, может быть достаточно просто работать с каждой половиной varA отдельно, а не выделять два новых буфера и копировать их.

Вы можете использовать цикл для копирования отдельных байтов один за другим:

 for (int i = 0; i != 32; ++i) varB[i] = varA[i]; for (int i = 0; i != 32; ++i) varC[i] = varA[32 + i]; 

Или memcpy из библиотеки времени выполнения C:

 memcpy(varB, varA, 32); memcpy(varC, varA + 32, 32); 

Хорошо, давайте сделаем это ….

 uint64 source; uint32 upperBytes, lowerBytes; upperBytes = source&0xFFFFFFFF00000000; lowerBytes = source&0x00000000FFFFFFFF; 

Домашнее задание.