次の手順を実行すると、次のエラーが発生します。
../src/Sample.cpp:19:エラー:\ u2018UINT8 *\u2019から\u2018UINT8\u2019にキャストすると精度が失われます
#include <iostream>
using namespace std;
typedef unsigned char UINT8;
typedef unsigned int UINT32;
#define UNUSED(X) X=X
int main() {
UINT8 * a = new UINT8[34];
UINT32 b = reinterpret_cast<UINT8>(a);
UNUSED(b);
return 0;
}
これをどのように解決しますか。文字列をunsignedlongに変換しようとしているのではなく、char *(ADDRESS値)をintに変換しようとしていることに注意してください。
ありがとう
解決:
この問題はポインタのサイズに関係していることがわかります。32ビットマシンでは、ポインタサイズは32ビットであり、64ビットマシンの場合はもちろん64です。上記は64ビットマシンでは機能しませんが、32ビットマシンでは機能します。これは64ビットマシンで動作します。
#include <iostream>
#include <stdint.h>
using namespace std;
typedef uint8_t UINT8;
typedef int64_t UINT32;
#define UNUSED(X) X=X
int main() {
UINT8 * a = new UINT8[34];
UINT32 b = reinterpret_cast<UINT32>(a);
UNUSED(b);
return 0;
}