Выполнение memcpy()
с BYTE*
до char*
может привести к переносу вокруг диапазона char
, то есть от -127 до 127, из-за того, что BYTE
будет без знака от 0 до 255.
Напримерпредположим, что у нас есть:
BYTE uchArr[] = {12, 129, 250};
BYTE * ptr_uchArr = (BYTE*) malloc (sizeof(BYTE)*3);
memcpy(ptr_uchArr, &uchArr, sizeof(BYTE)*3);
//ptr_uchArr shall be {12, 129, 250} as intended...
И теперь мы хотим выполнить memcpy()
с BYTE*
до char*
char * ptr_chArr = (char*) malloc (sizeof(char)*3);
memcpy(ptr_chArr, ptr_uchArr, sizeof(BYTE)*3);
//ptr_chArr shall be {12, -127, -6} as a result of wrap around...
Что если мы выполним обратное, то есть memcpy()
от char*
до BYTE*
:
memcpy(ptr_uchArr, ptr_chArr, sizeof(BYTE)*3);
//ptr_uchArr shall still be {12, 129, 250} as intended again as a result of wrap around...