C++ 在C++;,如何在变量中正确存储字节类型?

C++ 在C++;,如何在变量中正确存储字节类型?,c++,winapi,C++,Winapi,如果这是显而易见的,或者已经在其他地方得到答复,请提前道歉。我已经搜索了几个小时,但是我的C++经验不足,可能我缺少合适的词汇来形成合适的搜索词。 我遇到的问题出现在使用列出特定运行进程使用的所有模块的代码的上下文中 我正在努力寻找一种方法,将以下代码行生成的输出存储在变量中: _tprintf( TEXT("\n base address = 0x%08X"), (DWORD) me32.modBaseAddr ); 从Microsoft文档中可以看出,“me32.mod

如果这是显而易见的,或者已经在其他地方得到答复,请提前道歉。我已经搜索了几个小时,但是我的C++经验不足,可能我缺少合适的词汇来形成合适的搜索词。 我遇到的问题出现在使用列出特定运行进程使用的所有模块的代码的上下文中

我正在努力寻找一种方法,将以下代码行生成的输出存储在变量中:

    _tprintf( TEXT("\n     base address   = 0x%08X"), (DWORD) me32.modBaseAddr );
从Microsoft文档中可以看出,“me32.modBaseAddr”是指向字节类型变量的指针。上面的代码非常漂亮地将me32.modBaseAddr中保存的正确十六进制地址打印到控制台中

我要做的是将me32.modBaseAddr存储到一个变量中,然后该变量可以传递给std::ofstream(我想将其写入一个文件)

我肯定我没有理解一些基本的东西,所以即使有人能为我指出正确的方向,让我了解我需要学习的东西,那也会非常有用


谢谢

基本上,
modBaseAddr
成员是指向
modBaseSize
元素数组的第一个元素的指针。每个元素都是一个
字节

因此,要将所有原始二进制数据写入流(以二进制模式打开),您可以执行以下操作:

my_stream.write(reinterpret_cast<char*>(me32.modBaseAddr), me32.modBaseSize);
my_stream.write(重新解释cast(me32.modBaseAddr),me32.modBaseSize);

如果我理解正确,你想保存那行格式化文本吗

C风格是最好的,不要使用reinterpret cast,您只会使编译器工作更努力,并阻止它对代码进行优化。只需使用该代码:

char var[256];
sprintf(var, "\n     base address   = 0x%08X", me32.modBaseAddr);

modBaseSize是一个
DWORD
。你真的是说
modBaseAddr
?啊,我的错。没错。至于将代码> > MODBASEIST/<代码>成员写入C++流,如果只是一个文本流,只需使用<代码>正常编写。我现在已经编辑过了。这个地址肯定是针对不同流程中的模块的。这对我的理解很有帮助。谢谢你,老兄。这么简单让我觉得很愚蠢,但谢谢你!这对于64位进程来说是失败的,因为指针是16位十六进制数字幸运的是,我碰巧看到的是一个32位进程,但出于好奇,是否有类似的简单方法可以用于64位进程?@David Heffernan,这是真的,这就是为什么打印指针时应该始终使用“%p”的原因,但如果之前在32位变量中存储了64位地址,则没有意义。在这种情况下,可以使用宏。如果将64位地址放入32位变量中,则没有任何帮助。