Windows API SIZE_T在内存和控制台中不显示相同的值

Windows api SIZE_T don't show same value in memory and in console

提问人:OOM 提问时间:8/29/2019 最后编辑:Uwe KeimOOM 更新时间:8/29/2019 访问量:50

问:

我正在尝试处理 Windows.h 结构中的SIZE_T变量,但返回的值存在问题。

我不明白为什么内存和输出之间会有所不同。

我应该使用控制台中显示的值在内存中工作,这不太有趣。然后我被困住了。

介绍

我尝试了一些测试,看看它是否正常。

法典:

SIZE_T aaa = 10000;
std::cout << "The aaa value is : " << aaa << std::endl;

输出:

The aaa value is : 2710

我试图强制强制转换以查看内存中的值是否会更改

int a = (int)aaa;
unsigned int b = (unsigned int)aaa;
long c = (long)aaa;
unsigned long d = (unsigned long)aaa;

但仍然相同,该值在内存中保持不变 (10000)。

主要问题

法典:

SIZE_T val;
WindowsFunct(&val); //val get 65536 in memory
std::cout << "The val is : " << val << std::endl;

输出:

The val is : 10000 //The value that i would deal with in my program

那么,它们是否是一种在内存中获取所显示值的方法?

编辑:原文代码:

MEMORY_BASIC_INFORMATION mbi;
LPVOID mainModuleAddr = (LPVOID)GetModuleHandle(NULL);
VirtualQuery(mainModuleAddr, &mbi, sizeof(mbi));
std::cout << "Main module Region Size: " << mbi.RegionSize << std::endl;
C++ Windows IOstream

评论

0赞 Max Langhof 8/29/2019
当你说“在记忆中”时,你是什么意思?您是否在调试器中查看此值,并看到与控制台中不同的值?
1赞 OOM 8/29/2019
是的,完全是最大

答:

3赞 SoronelHaetir 8/29/2019 #1

您的 2710 输出是因为您在某个时候将 std::hex iomanip 喂给了 cout。10000 == 0x2710。

如果您使用 std::d ec iomanip,它将显示为 10000。

std::cout << "The aaa value is : " << std::dec << aaa << std::endl;