如何在c ++中将字符串转换为无符号字符...
我有,
unsigned char m_Test[8];
我想将字符"Hello world"
分配给m_Test
。
怎么做?
答案 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值得了解,因为它解释了当您将指针混合到char
和unsigned char
时,优秀编译器给出的有趣警告。
答案 3 :(得分:2)
答案 4 :(得分:1)
你可以使用strcpy函数 但请记住,m_Test只有8个大小,并且会有溢出。 Strcpy不会检查,你会得到一个异常
char * strcpy ( char * destination, const char * source );
答案 5 :(得分:1)
您可以使用c_str()
std::string
函数来获取char*
字符串。这个方法基本上返回一个指向c风格字符串的指针。在此之后,您可以使用常规字符串复制功能(例如strcpy
或strncpy
)将值复制到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());
我认为这个示例将在将来对其他人有所帮助。