Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 转换为短类型指针?_C++_Inline Assembly - Fatal编程技术网

C++ 转换为短类型指针?

C++ 转换为短类型指针?,c++,inline-assembly,C++,Inline Assembly,我最近从内联汇编转到了高级语言(C++),我想将值^0x1A3C的结果设置为短类型指针(WORD PTR),但我遇到了以下错误: int类型的值不能用于初始化short类型的实体* 我在将int类型传递给short*时遇到问题: void PacketEncrypt(Packet* packet, int sizeofpacket) { char* pointer; pointer = ((char*)packet+sizeofpacket) -2; short *poi

我最近从内联汇编转到了高级语言(C++),我想将
值^0x1A3C
的结果设置为短类型指针(WORD PTR),但我遇到了以下错误:

int类型的值不能用于初始化short类型的实体*

我在将int类型传递给short*时遇到问题:

void PacketEncrypt(Packet* packet, int sizeofpacket)
{
    char* pointer;
    pointer = ((char*)packet+sizeofpacket) -2;
    short *pointer = packet->PacketSize^0x1A3C;
    packet->Type += 0x0FFF7;
}
我想让编译器做什么:

0041585E   8B45 0C          MOV EAX,DWORD PTR SS:[EBP+C]
00415861   8B4D 08          MOV ECX,DWORD PTR SS:[EBP+8]
00415864   8D5401 FE        LEA EDX,DWORD PTR DS:[ECX+EAX-2]
00415868   8955 F8          MOV DWORD PTR SS:[EBP-8],EDX
0041586B   8B45 08          MOV EAX,DWORD PTR SS:[EBP+8]
0041586E   0FBF08           MOVSX ECX,WORD PTR DS:[EAX]
00415871   81F1 3C1A0000    XOR ECX,1A3C
00415877   8B55 F8          MOV EDX,DWORD PTR SS:[EBP-8]
0041587A   880A             MOV WORD PTR DS:[EDX],CX

假设要将计算值写入
指针所指向的位置:

*reinterpret_cast<short*>(pointer) = packet->PacketSize^0x1A3C;
*重新解释(指针)=数据包->数据包大小^0x1A3C;

reinterpret_cast
的意思是“获取一种类型的对象并将其强制转换为另一种类型”,是用于在指针之间转换为不相关类型的强制转换;赋值时,指针指向
short
。请注意,如果指针没有正确对齐
short
,这可能会导致未定义的行为。一般来说,
reinterpret\u cast
会删除编译时类型检查,让程序员有责任确保正确使用结果。

我想你可能用了错误的方法——“我希望我的编译器生成此代码”是相当随意的。编译器可以合法地生成任何具有正确可观察行为的代码。您在这里真正想要什么?我最近从内联汇编迁移到高级语言(C++),我想将值^0x1A3C的结果设置为短类型指针(单词PTR)但是我仍然有以下错误:int类型的值不能用于初始化C++中的Type *的实体,不要试图像汇编语言程序员那样思考,你最终会对语言感到沮丧和恼火。最好做C++所要做的事情:关注更大的图片,更高层次的东西。在大多数情况下,编译器比真正优秀的程序员更擅长生成合理的代码。如果你强迫它输出类似的东西,你可能会阻止其他优化。@ USE1175832:不要太注意C++编译器生成的汇编代码。如果编写一个包含数百行的大型程序,您将无法检查整个输出代码的外观。请相信你的C++编译器。这就是我需要的,你能给我们一点关于RealType的额外信息吗?我知道这个名字说明了一切,但是为了学习,顺便说一句,我没有找到合适的词来描述我的问题,所以我想asm输出可以帮助某人作为参考。再次感谢。@user1175832:我已经添加了更多关于
reinterpret\u cast
的详细信息。