2016-03-15 107 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_。 –

相關問題