2010-02-05 122 views
12

如何將字符串轉換爲unsigned char在C++ ...如何將字符串轉換文字爲unsigned char數組中的Visual C++

我有,

unsigned char m_Test[8]; 

我想分配一個字符串"Hello world"m_Test

該怎麼辦?

+0

我改變了問題的標題,因爲實際上你想要轉換的是字符串文字。一個字符串是C++中的一個std類,標題有誤導性。希望你不介意。 – 2013-07-09 10:09:04

+0

@IvayloStrandjev現在的標題是極具誤導性的。問題是「如何將字符串文字分配給無符號字符數組」而不是「如何將字符串文字轉換爲無符號字符」。即使你的方向正確,它也是一個無符號的字符數組,而不是一個無符號的字符。 – 2016-06-01 16:55:07

+0

@Mike正確我已經修復了,現在 – 2016-06-02 07:22:43

回答

17

首先,數組必須至少足以容納字符串:

unsigned char m_Test[20]; 

然後你使用strcpy。你需要投的第一個參數,以避免發出警告:

strcpy((char*) m_Test, "Hello World"); 

或者,如果你想成爲一個C++純粹:

strcpy(static_cast <char*>(m_Test), "Hello World"); 

如果你想初始化字符串,而不是分配給它,你可以也說:

unsigned char m_Test[20] = "Hello World"; 
+6

也許值得一提的是,您可以在最後一個示例中刪除大小,因爲編譯器會將其計算出來。 – 2010-02-05 09:54:04

1

你可以使用strcpy函數 但是請記住,m_Test只有8個大小,並且會有溢出。 STRCPY不會檢查,你會得到一個異常

char * strcpy (char * destination, const char * source); 
+1

可以使用strncpy ...? – Goz 2010-02-05 09:08:41

+0

但它不會複製整個字符串。我相信主要目的是複製整個字符串。 – anthares 2010-02-05 09:13:55

+0

「你會得到一個例外」 - 如果你幸運的話。 – 2010-02-05 09:50:38

1

您可以使用std::stringc_str()函數來獲取char*出字符串。這個方法基本上返回一個指向c風格字符串的指針。之後,您可以使用普通字符串複製功能(如strcpystrncpy)將值複製到test

1

您可以使用strcpy

unsigned char m_Test[8]; 
strcpy((char*)m_Test, "Hello world"); 

注意,「世界,你好」是8個字節太久,所以你可能會得到一個segfault。

2

您可以使用像strcpy或字符串複製功能更好strncpy,這也一定大小檢查:

strncpy ((char*) m_Test,"Hello World",8); 
4
strncpy(m_Test, "Hello world", sizeof(m_Test)); 

這裏是維基百科上strncpy

3

對於所有的實際目的,strcpy的答案是正確的,與注意,8是不是你的字符串足夠大。

如果你想成爲真正的迂腐,你可能需要像這樣:

#include <algorithm> 

int main() { 
    const char greeting[] = "Hello world"; 
    unsigned char m_Test[sizeof(greeting)]; 
    std::copy(greeting, greeting + sizeof(greeting), m_Test); 
} 

的原因是,標準::複製將轉換字符在原字符串unsigned char。 strcpy將導致原始字符串中的字符重新解釋爲unsigned char。你不會說你想要哪一個。

該標準允許兩者之間存在差異,雖然它非常罕見:您需要char進行簽名,在具有1s'補碼或符號幅度表示的實現中。你幾乎可以忽略這個可能性,但IMO值得了解,因爲它解釋了當你混合指向charunsigned char的指針時,好的編譯器給你的有趣警告。

+0

數組在[]和不使用變量或函數之間必須有一個常數值。 C++規則。 – 2010-02-05 10:08:18

+2

大部分是正確的,但'sizeof'不是一個函數,'sizeof(greeting)'是一個整型常量表達式。你可以在整型常量表達式中以某種方式「使用變量」,這就是其中之一,因爲'greeting'的值沒有被使用,只有'const char [12]'的類型。 – 2010-02-05 10:09:52

+0

'strlen(greeting)'在C++中是不允許的,因爲你說的原因。 – 2010-02-05 10:17:02

相關問題