如何将 unsigned char 值表示为十六进制字符串?
Posted
技术标签:
【中文标题】如何将 unsigned char 值表示为十六进制字符串?【英文标题】:How to represent unsigned char values as hexadecimal string? 【发布时间】:2016-03-15 16:44:45 【问题描述】:我想将无符号字符数组内容转换为十六进制字符串表示形式。 任何人都可以提供功能或出路吗?
unsigned char codeslink[5] = 0x33, 0x74, 0x74, 0x73, 0x72;
std::string my_std_string(reinterpret_cast<const char *>(codeslink), 5);
std::string my_std_string((const char *)codeslinks);
我想得到一个返回值3374747372
作为字符或字符串。
更新:
这是我使用@πάνταῥεῖ:
提出的功能答案我想让它变得更好,并使其能够处理unsigned char
,如各种长度大小的0x00,0x04,0x00,0x11
。
std::string Return_Uchar_To_String(unsigned char uns_char, size_t uns_char_len)
std::ostringstream oss;
oss << std::hex << std::setw(2) << std::setfill('0');
for(size_t i = 0; i < uns_char_len; ++i)
oss << (unsigned int)uns_char[i];
return oss.str();
【问题讨论】:
std::string my_std_string = std::to_string(3374747372);
?
这不是通过强制转换完成的。
这行不通:0x33 != "33"
。否则,这是一个副本:***.com/questions/4691608/…
@R_Kapp std::string my_std_string = std::to_string(codeslink);
不明白你的意思? @πάντα ῥεῖ 如何做到最好? @NatanOliver 对我也不起作用
@R_Kapp 的评论是关于十六进制值的废话。
【参考方案1】:
我想得到一个返回值
3374747372
作为字符或字符串。
在这种情况下,投射不起作用。
您可以使用文本格式化 IO 来获取数组内容的十六进制字符串表示:
unsigned char codeslink[5] = 0x33, 0x74, 0x74, 0x73, 0x72;
std::ostringstream oss;
oss << std::hex << std::setfill('0');
for(size_t i = 0; i < 5; ++i)
oss << std::setw(2) << (unsigned int)codeslink[i];
std::string result = oss.str();
Live Demo
【讨论】:
感谢编辑帖子的标题,我发布了一个从它派生出来的函数,它可以灵活地适应各种 unsigned char 大小你能看看这个函数并帮助我将它重构为健壮吗? @DavidoLLP 你的函数签名似乎有一个小错误:std::string Return_Uchar_To_String(unsigned char uns_char, size_t uns_char_len)
应该是std::string Return_Uchar_To_String(const unsigned char* uns_char, size_t uns_char_len)
,否则它看起来没问题并且会健壮。
@ πάντα ῥεῖ 感谢更新我用这个值尝试了我的函数unsigned char codeslink[4] = 0x00, 0x00, 0x02, 0x11 ;
我得到了这个000211
而不是00000211
函数是` Return_Uchar_To_String(codeslink, sizeof(codeslink));`与unsigned char codeslink[4] = 0x10, 0x00, 0x02, 0x11 ;
之类的电话类似,有什么想法,这是一个错误吗?
@DavidoLLP 抱歉,我忘记了setw()
不粘在流上,只是改变了下一个输出字段的行为。
@πάντα ῥεῖ 没有冒犯,你有帮助谢谢以上是关于如何将 unsigned char 值表示为十六进制字符串?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用ostream在c ++中打印unsigned char作为十六进制?
将从 SHA1 返回的 unsigned char* 转换为字符串