C++简单类型转换,该如何处理
C++简单类型转换
DWORD d = *(DWORD*)str;//str = "ABC"
0042B3D5 mov eax,dword ptr [str] //eax = 4705456
0042B3D8 mov ecx,dword ptr [eax] //ecx = 4407873
0042B3DA mov dword ptr [d],ecx //d = 4407873
DWORD s = (DWORD)str;
0042B3DD mov eax,dword ptr [str] //eax = 4705456
0042B3E0 mov dword ptr [s],eax //s = 4705456
这两种转换方式 什么区别,为什么过一个ecx值就不一样了
------解决方案--------------------
一个是类型强转,一个是指向的内容强转后赋值,不是一回事
------解决方案--------------------
------解决方案--------------------
楼主你可能没看清楚,两段汇编代码不只是中间哪行的区别,
各种的最后一行也不一样,一个是用的ecx,一个用的是eax
另外:ABC 由低到高分别为 0x414243 转换为dword后 由高到低就是 ox434241 = 4407873
至于第二个就不一定了,那是个地址,再这样转一次还可以得出来 DWORD s1 = s *(DWORD*)s;
DWORD d = *(DWORD*)str;//str = "ABC"
0042B3D5 mov eax,dword ptr [str] //eax = 4705456
0042B3D8 mov ecx,dword ptr [eax] //ecx = 4407873
0042B3DA mov dword ptr [d],ecx //d = 4407873
DWORD s = (DWORD)str;
0042B3DD mov eax,dword ptr [str] //eax = 4705456
0042B3E0 mov dword ptr [s],eax //s = 4705456
这两种转换方式 什么区别,为什么过一个ecx值就不一样了
------解决方案--------------------
一个是类型强转,一个是指向的内容强转后赋值,不是一回事
------解决方案--------------------
------解决方案--------------------
楼主你可能没看清楚,两段汇编代码不只是中间哪行的区别,
各种的最后一行也不一样,一个是用的ecx,一个用的是eax
另外:ABC 由低到高分别为 0x414243 转换为dword后 由高到低就是 ox434241 = 4407873
至于第二个就不一定了,那是个地址,再这样转一次还可以得出来 DWORD s1 = s *(DWORD*)s;