转换为短型指针?

时间:2012-07-24 07:51:06

标签: c++ inline-assembly

我最近从内联汇编转到高级语言(C ++),我希望将结果从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

1 个答案:

答案 0 :(得分:2)

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

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

reinterpret_cast表示“获取一种类型的对象并将其强制转换为另一种类型”,并且是用于在指向不相关类型的指针之间进行转换的转换;该值被指定为pointer指向short。请注意,如果指针没有short的正确对齐方式,则可能会导致未定义的行为。通常,reinterpret_cast会删除编译时类型检查,而在程序员身上留下责任以确保正确使用结果。