如何在visual c ++中将字符串文字转换为unsigned char数组

时间:2010-02-05 09:05:33

标签: c++

如何在c ++中将字符串转换为无符号字符...

我有,

unsigned char m_Test[8];

我想将字符"Hello world"分配给m_Test

怎么做?

8 个答案:

答案 0 :(得分:19)

首先,数组必须至少足以容纳字符串:

 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";

答案 1 :(得分:4)

strncpy(m_Test, "Hello world", sizeof(m_Test));

这是strncpy上的维基百科:

答案 2 :(得分: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);
}

原因是std :: copy将原始字符串中的字符转换为 unsigned char。 strcpy将导致原始字符串中的字符重新解释unsigned char。你没有说你想要哪一个。

标准允许两者之间存在差异,尽管这种情况非常罕见:在需要1s补码或符号幅度表示的实现中,您需要char进行签名。您几乎可以忽略这种可能性,但IMO值得了解,因为它解释了当您将指针混合到charunsigned char时,优秀编译器给出的有趣警告。

答案 3 :(得分:2)

你可以使用像strcpy这样的字符串复制功能,或者更好的strncpy,它也有一些尺寸检查:

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

答案 4 :(得分:1)

你可以使用strcpy函数 但请记住,m_Test只有8个大小,并且会有溢出。 Strcpy不会检查,你会得到一个异常

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

答案 5 :(得分:1)

您可以使用c_str() std::string函数来获取char*字符串。这个方法基本上返回一个指向c风格字符串的指针。在此之后,您可以使用常规字符串复制功能(例如strcpystrncpy)将值复制到test

答案 6 :(得分:1)

您可以使用strcpy

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

请注意,“Hello world”对于8个字节而言太长,因此您可能会遇到段错误。

答案 7 :(得分:0)

string uInput;
cout << "Enter message" << endl;
getline(cin, uInput);

我在这里添加1,因为在c字符串中,结尾有'\ 0'

unsigned char dataS[uInput.size()+1];
strcpy(reinterpret_cast<char*>(dataS), uInput.c_str());

我认为这个示例将在将来对其他人有所帮助。