如何让C++中变量内存地址的十六进制输出转为大写?
解决C++输出内存地址时十六进制字符转大写的问题
直接使用std::uppercase操纵符输出指针地址时,不会将十六进制字符转为大写——因为std::cout处理指针类型的格式化逻辑独立于整数的十六进制格式规则,所以uppercase不会生效。下面提供两种可行的解决方法:
方法1:将指针转换为整数类型后输出
把指针通过reinterpret_cast转换为uintptr_t(专门用于存储指针值的无符号整数类型),再配合hex和uppercase操纵符输出,就能得到大写的十六进制地址:
#include <Windows.h> #include <iostream> #include <cstdint> // 引入uintptr_t的头文件 using namespace std; int main() { int varInt(123456); cout << "varInt 0x" << uppercase << hex << reinterpret_cast<uintptr_t>(&varInt) << " = " << dec << varInt << endl; // 用dec切换回十进制,避免后续输出受hex格式影响 }
输出示例:
varInt 0x54BE5FF85C = 123456
方法2:将地址转为字符串后手动转换大写
利用stringstream把指针转为字符串,再通过transform函数将"0x"后的字母转为大写:
#include <Windows.h> #include <iostream> #include <string> #include <sstream> #include <algorithm> using namespace std; int main() { int varInt(123456); stringstream addrStream; addrStream << &varInt; string addrStr = addrStream.str(); // 从索引2的位置开始(跳过"0x"),将字符转为大写 transform(addrStr.begin() + 2, addrStr.end(), addrStr.begin() + 2, ::toupper); cout << "varInt " << addrStr << " = " << varInt << endl; }
输出示例:
varInt 0x54BE5FF85C = 123456
内容的提问来源于stack exchange,提问作者Sinister_7
相关产品推荐
相关产品推荐

