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
相关产品推荐
相关产品推荐

