如何为uintptr_t类型变量添加0x前缀并存储带前缀的数值
核心概念说明
uintptr_t 是无符号整数类型,存储的是纯数值,0x 仅为十六进制文本表示的格式前缀,不属于数值本身的一部分,不存在「存储带0x前缀的uintptr_t值」的说法。你当前的动态地址计算逻辑完全正确,数值本身没有问题,只是输出展示时缺少前缀而已,不影响任何业务逻辑。
输出自动带
0x前缀的实现 不需要手动拼接0x,引入<iomanip>头文件后使用std::showbase格式控制符,即可让cout自动为十六进制输出添加0x前缀:
#include <iostream> #include <iomanip> // 引入格式控制所需头文件 uintptr_t modBase = GetModuleBaseAddress(pID, "ac_client.exe"); // std::hex设置十六进制输出,std::showbase自动添加0x前缀 std::cout << std::hex << std::showbase << modBase << std::endl; // 输出为 0x400000 uintptr_t dynamicBaseAddress = modBase + 0x10f4f4; std::cout << "DynamicBaseAddress is: " << std::hex << std::showbase << dynamicBaseAddress << std::endl; // 输出为 DynamicBaseAddress is: 0x50f4f4
存储带
0x前缀的地址 如果确实需要把带0x前缀的地址作为文本存储,可以借助std::stringstream实现格式转换:
#include <sstream> #include <string> std::stringstream ss; ss << std::hex << std::showbase << dynamicBaseAddress; std::string addrStr = ss.str(); // addrStr的值为 "0x50f4f4"
内容的提问来源于stack exchange,提问作者Dezert
相关产品推荐
相关产品推荐

