这个转换是如何在c ++中从unsigned char *到unsigned short完成的? x =(unsigned char *)& x - (unsigned char *)0x8888;

时间:2017-02-12 19:46:34

标签: c++

这个转换如何从unsigned char *到unsigned short?

#include<iostream>
using namespace std;

int main()
{
    unsigned short x;
    x= (unsigned char*)&x - (unsigned char*) 0x8888;
    cout<<us<<endl;
    return 0;
}

当我尝试添加这样的

x= (unsigned char*)&x + (unsigned char*) 0x8888;

然后出现错误。它说“无效的操作符'类型'unsigned char *'和'unsigned char *'到二进制'运算符+'”请帮助我理解这种语法。

2 个答案:

答案 0 :(得分:0)

可以对两种地址数据类型执行减法运算,但不能添加 另外,+的两个操作数都必须是算术类型,或者一个操作数必须是指针而另一个操作数必须是整数类型。

C ++ 11-§5.7/ 1:

  

另外,两个操作数都应具有算术或非范围的枚举类型,或者一个操作数应是指向完全定义的对象类型的指针,另一个操作数应具有整数或无范围的枚举类型。

答案 1 :(得分:0)

您可以使用int/short/long将指针转换为cstdint C++11,如下所示,但我不确定是否建议添加指针@haccks

#include<iostream>
#include <cstdint>

using namespace std;

int main()
{
    unsigned short x;
    //x= (unsigned char*)&x + (unsigned char*) 0x8888;
    x = static_cast<unsigned short>(reinterpret_cast<uintptr_t>(&x)) + static_cast<unsigned short>(0x8888);
    cout<<x<<endl;
    return 0;
}

有关详细信息,请参阅此link