当我执行以下操作时,我收到此错误:
../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;
}
我将如何解决这个问题。请记住,我不是试图将字符串转换为无符号长整数,而是将 char*(地址值)转换为 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;
}