如何將字符串轉換爲unsigned char在C++ ...如何將字符串轉換文字爲unsigned char數組中的Visual C++
我有,
unsigned char m_Test[8];
我想分配一個字符串"Hello world"
到m_Test
。
該怎麼辦?
如何將字符串轉換爲unsigned char在C++ ...如何將字符串轉換文字爲unsigned char數組中的Visual C++
我有,
unsigned char m_Test[8];
我想分配一個字符串"Hello world"
到m_Test
。
該怎麼辦?
首先,數組必須至少足以容納字符串:
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";
也許值得一提的是,您可以在最後一個示例中刪除大小,因爲編譯器會將其計算出來。 – 2010-02-05 09:54:04
您可以使用std::string
c_str()
函數來獲取char*
出字符串。這個方法基本上返回一個指向c風格字符串的指針。之後,您可以使用普通字符串複製功能(如strcpy
或strncpy
)將值複製到test
。
您可以使用strcpy
:
unsigned char m_Test[8];
strcpy((char*)m_Test, "Hello world");
注意,「世界,你好」是8個字節太久,所以你可能會得到一個segfault。
strncpy(m_Test, "Hello world", sizeof(m_Test));
這裏是維基百科上strncpy:
對於所有的實際目的,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值得了解,因爲它解釋了當你混合指向char
和unsigned char
的指針時,好的編譯器給你的有趣警告。
數組在[]和不使用變量或函數之間必須有一個常數值。 C++規則。 – 2010-02-05 10:08:18
大部分是正確的,但'sizeof'不是一個函數,'sizeof(greeting)'是一個整型常量表達式。你可以在整型常量表達式中以某種方式「使用變量」,這就是其中之一,因爲'greeting'的值沒有被使用,只有'const char [12]'的類型。 – 2010-02-05 10:09:52
'strlen(greeting)'在C++中是不允許的,因爲你說的原因。 – 2010-02-05 10:17:02
我改變了問題的標題,因爲實際上你想要轉換的是字符串文字。一個字符串是C++中的一個std類,標題有誤導性。希望你不介意。 – 2013-07-09 10:09:04
@IvayloStrandjev現在的標題是極具誤導性的。問題是「如何將字符串文字分配給無符號字符數組」而不是「如何將字符串文字轉換爲無符號字符」。即使你的方向正確,它也是一個無符號的字符數組,而不是一個無符號的字符。 – 2016-06-01 16:55:07
@Mike正確我已經修復了,現在 – 2016-06-02 07:22:43