나는 memcpy()
이 당신이 원하는 것을 위해 디자인되었다고 생각하지 않습니다. 일반적으로, 당신은
int a[4] = { 1, 2, 3, 4 };
int b[3];
int c[5] = { 0 };
::memcpy(b, a, 3 * sizeof(int)); // b is { 1, 2, 3 }
::memcpy(c+2, b, 3 * sizeof(int)); // c is { 0, 0, 1, 2, 3 }
C + 2 (객체가 INT, 숯불, 오래 오래, 등 수 있습니다 경우) 하나 이상의 전체 개체를 복사 할 memcpy()
을 사용하는 것은 "C + 2 바이트입니다 ". "c + 2 ints"(Win32/x86 시스템에서는 8 바이트)입니다.
은 char 또는 unsigned char 포인터로 캐스팅하여 개별 바이트에 액세스하지만 많은 함정이있는 것을 실제로 이해하지 않는 한 권장하지 않습니다.
unsigned x = 0;
unsigned char *px = reinterpret_cast<unsigned char *>(&x);
px[0] = 0xFF;
px[2] = 0xAA;
여기서 위험한 점은 컴퓨터가 정수를 저장하는 방법에 대한 지식이 있다고 가정한다는 것입니다. x86 시스템에서 x는 0x00AA00FF이지만 Sun Sparc 시스템에서는 0xFF00AA00입니다.
정수의 일부를 설정해야하는 경우 "or"및 "shift"를 사용하는 것이 더 나을 때가 많습니다.
x = (0xFF<<24) | (0xAA<<8);
은 모든 아키텍처에서 0xFF00AA00을 제공합니다. 0xFF < < 24는 0xFF를 왼쪽으로 24 비트 시프트하여 0xFF000000이됩니다. 0xAA < < 8 값 0xAA를 왼쪽으로 8 비트 씩 이동하여 0x0000AA00이됩니다.
"또는"함께 0xFF00AA00을 표시합니다.
'pB + 1'은 1 바이트 이상 증가시킵니다 : sizeof (long long)'바이트는 정확하게 나타납니다. – Mysticial