0

void* を使用していくつかの int をメモリに格納してから取得しようとしていますが、「算術で使用される型 'void *' のポインター」という警告がスローされ続けます。

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 バイトが必要になります。

4

3 に答える 3