这个转换如何从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 *'到二进制'运算符+'”请帮助我理解这种语法。
答案 0 :(得分:0)
可以对两种地址数据类型执行减法运算,但不能添加
另外,+
的两个操作数都必须是算术类型,或者一个操作数必须是指针而另一个操作数必须是整数类型。
另外,两个操作数都应具有算术或非范围的枚举类型,或者一个操作数应是指向完全定义的对象类型的指针,另一个操作数应具有整数或无范围的枚举类型。
答案 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。