2012-09-06 280 views
2

我需要這種轉換,因爲我正在使用庫並希望保留它們的定義,但必須使它們一起工作。C++ Uint8數據類型轉換爲const char *數據類型

,所以我有

functionX(uint8 *src, uint16 nSrcLen){ 
    write(src); 
} 

write(const char msg){} 

感謝你的幫忙;)

編輯:額外的相關信息

functionX和寫入應,如果可能的反正留這種方式。不過,無論如何,我對更感興趣解決方案。

SRC將攜帶空字節

編輯:寫的,它是如何使用的使用

std::string hex_chars; 
std::getline(std::cin, hex_chars); 
std::istringstream hex_chars_stream(hex_chars); 

unsigned int ch; 
while (hex_chars_stream >> std::hex >> ch) 
{ 
write(ch); 
} 

現在,沒有必要爲十六進制的轉換了,但我猜猜它仍然有必要使用這種流構造

編輯:當前解決方案

for(uint16 i = 0; i < nSrcLen; i++) 
{ 
    write(reinterpret_cast<unsigned char*>(src)[i]); 
    //printf("%d",reinterpret_cast<unsigned char*>(src)[i]);  
} 

適合我,現在 - 謝謝你們!

+0

@ronalchn指着我一些方向,我認爲對我來說一個快速解決方案是步進低谷* src *使用* nSrcLen * *寫* *每個字符* src * - 我正在努力這是現在,但請,打我吧;) – Jook

回答

4

要轉換指針類型,只需將指針從一種類型轉換爲另一種類型。

例如,

uint8 *uint8_pointer = ?; 

// C style cast 
const char *char_pointer = (char*)uint8_pointer; 

// newer C++ style cast syntax 
const char *char_pointer2 = reinterpret_cast<char*>(uint8_pointer); 

你也可以做到這一點反過來:

char *char_pointer = ?; 
uint8 *uint8_pointer = reinterpret_cast<uint8*>(char_pointer); 

爲了您的功能,你可以使用:

functionX(uint8 *src, uint16 nSrcLen){ 
    write(reinterpret_cast<char*>(src)); 
} 
void write(const char* msg); 
+0

它不是我想做一個功能 - 功能將被用於這種方式,因爲寫是一個「lib」的函數,functionX是另一個的一部分。所以我得到_unit8 * _並且必須通過它作爲_const char_ – Jook

+0

啊,我明白了,在我的答案中給出了例子。我假設你在你的問題中給出的函數原型有一個錯字(應該是'const char *'而不是'const char')。 – ronalchn

+0

它的工作原理 - 使用const char * char_pointer =(char *)src;和'write((* char_pointer)) - 但只寫第一個字符,而不是整個字符串。有任何想法嗎? – Jook