-2

我最近从内联汇编迁移到高级语言 (C++),我想将结果从 a 设置value^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
4

1 回答 1

2

假设您要将计算值写入指向的位置pointer

*reinterpret_cast<short*>(pointer) = packet->PacketSize^0x1A3C;

reinterpret_cast意思是“将一个类型的对象强制转换为另一种类型”,是用于在指向不相关类型的指针之间进行转换的转换;该值被分配,就好像pointer指向一样short。请注意,如果指针没有正确对齐short. 通常,reinterpret_cast删除编译时类型检查,让程序员有责任确保正确使用结果。

于 2012-07-24T08:10:59.097 回答