2016-03-15 44 views
-7

我想将无符号字符数组内容转换为十六进制字符串表示形式。
任何人都可以帮助一个功能或出路吗?如何将无符号字符值表示为十六进制字符串?

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(); 
    } 
+0

'的std :: string my_std_string =的std :: to_string(3374747372);'? –

+0

这不是通过铸造完成的。 –

+2

这不会起作用:'0x33!=“33”'。否则,这是重复的:http://stackoverflow.com/questions/4691608/copying-non-null-terminated-unsigned-char-array-to-stdstring – NathanOliver

回答

1

我希望得到一个返回值3374747372为char或字符串。

铸造在这种情况下不起作用。

您可以使用文本格式的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

+0

感谢这对我的作品 – DavidoLLP

+0

编辑标题的帖子,我发布了一个函数,我派生它的形式ot使它灵活的各种无符号字符大小可以看看函数,并帮助我重构它是强大的? – DavidoLLP

+0

@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)否则,它看起来不错,并将_robust_。 –

相关问题