如何将 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 值表示为十六进制字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何将String / char格式化为十六进制值正确

如何使用ostream在c ++中打印unsigned char作为十六进制?

将字符串变量分配给unsigned char变量

将从 SHA1 返回的 unsigned char* 转换为字符串

如何在MATLAB中将原始Unicode十六进制转换为Unicode表示

将十六进制值设置为 char 变量以进行填充时出现问题