void * &을 사용하여 메모리에 몇 개의 int를 저장하려고 시도하지만이를 검색하지만 "산술 연산에 사용 된 void * '유형의 포인터를 계속 throw합니다.C++ void * memory traversal
void *a = new char[4];
memset(a, 0 , 4);
unsigned short d = 7;
memcpy(a, (void *)&d, 2);
d=8;
memcpy(a+2, (void *)&d, 2); //pointer of type ‘void *’ used in arithmetic
/*Retrieving*/
unsigned int *data = new unsigned int();
memcpy(data, a, 2);
cout << (unsigned int)(*data);
memcpy(data, a+2, 2); //pointer of type ‘void *’ used in arithmetic
cout << (unsigned int)(*data);
결과는 예상대로이지만 일부 컴파일러에서는 이러한 경고가 오류로 변할 수 있습니다. 이 일을하는 또 다른 방법이 있습니까?
정상적인 시나리오에서는이 방법이 좋지 않을 수 있지만 문제 진술에 따르면 부호없는 정수가 저장되어 2 바이트 패킷으로 전송되어야합니다. 내가 틀렸다면 정정하십시오. 그러나 제 이해에 따라, void * 대신 char *를 사용하면 3 자리 숫자에 3 바이트를 사용하게됩니다.
왜'void *'를 원합니까? 'char *' –
새로운 연산자는 동적으로 메모리를 할당하므로 memset이 필요 없다. 일반 데이터 유형의 경우 C++에는 템플 릿이 있습니다. –
부호없는 정수가 2 바이트로 저장되도록 이진 데이터가 필요합니다. char *가 3 자리 숫자에 대해 3 바이트를 차지한다고 생각합니까? – mindreader