You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 01:45:44