ReadProcessMemory char数组,十六进制输出到int

时间:2010-11-19 01:02:42

标签: c++ visual-studio-2008

我正在使用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;}

2 个答案:

答案 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不提供此功能。

此外,您没有提及您的类型是有符号还是无符号,如果它是无符号的,则使用无符号类型。