请考虑以下代码:
const char* cTitle = "MyTitle";
__int64 i = reinterpret_cast<__int64>(ctitle);
每次运行此代码时,我都会获得i
的不同值。
现在我想写一个测试来检查我们是否发送了正确的标题,所以我使用以下代码来实现目标但无法使用reinterpret_cast
获得标题:
char* cOrgValue = reinterpret_cast<char*> (i);
甚至可以获得原始标题值,如果是,那么这是正确的方法吗?
修改
所以让我重新解释一下这个问题:
在使用reinterpret_cast将其转换为char*
之后,如何获得__int64
的原始值。
答案 0 :(得分:2)
Don't use reinterpret_cast
。这是我的建议。相反,请致电std::memcpy
:
const char cTitle[] = "MyTitle";
std::uint64_t i64 = 0;
static_assert(sizeof(cTitle) >= sizeof(i64), "wrong sizes");
std::memcpy(&i64, cTitle, sizeof(i64));
通过对memcpy
的反向调用获得原始值。
注意:我使用了char数组而不是char指针,以便sizeof(cTitle)
成为8
(相关部分:{的数量读取字符串中的{1}},包括最终的char
)。使用\0
时,const char*
将为sizeof(cTitle)
,这是未指定的。