如何将字符串转换为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