【问题标题】:How to represent unsigned char values as hexadecimal string?如何将 unsigned char 值表示为十六进制字符串?
【发布时间】: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"。否则,这是一个副本:stackoverflow.com/questions/4691608/…
  • @R_Kapp std::string my_std_string = std::to_string(codeslink); 不明白你的意思? @πάντα ῥεῖ 如何做到最好? @NatanOliver 对我也不起作用
  • @R_Kapp 的评论是关于十六进制值的废话。

标签: c++ arrays string unsigned-char


【解决方案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() 不粘在流上,只是改变了下一个输出字段的行为。
  • @πάντα ῥεῖ 没有冒犯,你有帮助谢谢
猜你喜欢
  • 2018-09-14
  • 2019-07-27
  • 2021-01-04
  • 2018-01-22
  • 1970-01-01
  • 1970-01-01
  • 2014-12-05
  • 1970-01-01
  • 2020-07-18
相关资源
最近更新 更多