我正在使用ReadProcessMemory,以便读取进程内存。我正在看一个包含值3325的点。但是,我在十六进制查看器中查看内存,并且值显示为FD0C = 0CFD = 3325.所以当我将值读入我的char数组然后尝试转换(atoi)我变得垃圾了。我是c ++的新手,我想知道是否有一个功能可以进行转换,或者我是否必须自己编写(我不介意)?
char num_char[16];
_stackstart = _start + 0x28;
ReadProcessMemory(hProcess,(void *)_stackstart, &num_char, 4, &lpRead);
x = ...some conversion(num_char);
if(stack != x)
{tell me;}
答案 0 :(得分:0)
atoi
仅适用于十进制数字。请改用strtol
并传递基值16以转换十六进制数字:
x = strtol(num_char, NULL, 16);
答案 1 :(得分:0)
从您发布的代码和您的描述中,它看起来不像是在处理一串ascii字符,而是一个缓冲区,用于表示二进制数字。要将原始二进制值转换为整数,您只需将其转换为正确的值。请注意,必须小心将其强制转换为正确大小的整数类型。您只在示例编号中列出了2个字节,但您正在阅读4。
对于Visual Studio 2008,其中int或long是4字节整数,您只需执行此操作:
int x = *reinterpret_cast<int*>(num_char);
请注意,为了更加可移植,您应该使用保证为4个字节的类型。在Visual C ++中,您可以使用DWORD。虽然首选解决方案是使用stdint.h中的int32_t,但在Visual Studio 2010版本之前Visual Studio不提供此功能。
此外,您没有提及您的类型是有符号还是无符号,如果它是无符号的,则使用无符号类型。