2010-02-05 79 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

相关问题