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

C++中如何将unsigned char转为十六进制字符串?代码输出异常求解

问题解决方法

问题根源:unsigned char类型的变量会被流操作符当作字符处理,0xF1对应的是不可打印的ASCII控制字符,所以输出异常。要让流按无符号整数解析并转换为十六进制字符串,可按以下方式处理:

基础解决方法

将unsigned char强制转换为unsigned int,让流以数值方式处理,同时通过uppercase控制输出大写十六进制:

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int main() {
    unsigned char a = 0xF1;
    std::stringstream hexStr;
    // 强制转换为unsigned int,指定大写十六进制
    hexStr << hex << uppercase << static_cast<unsigned int>(a);
    string b = hexStr.str();
    cout << b << endl; // 输出F1
    return 0;
}

进阶:固定两位十六进制输出

如果需要确保输出始终是两位(比如0x0F要输出"0F"而非"F"),需引入<iomanip>头文件,配合setw和setfill:

#include <iostream>
#include <sstream>
#include <string>
#include <iomanip> // 包含setw、setfill的头文件
using namespace std;

int main() {
    unsigned char a = 0x0F;
    std::stringstream hexStr;
    hexStr << hex << uppercase 
           << setw(2) << setfill('0') // 固定宽度2位,不足补0
           << static_cast<unsigned int>(a);
    string b = hexStr.str();
    cout << b << endl; // 输出0F
    return 0;
}

内容的提问来源于stack exchange,提问作者Vinod

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 07:30:56