我正在使用两种不同的方式将char array
转换为string
,但是当char大小为16:时,它们都返回4作为字符串length
的值。
char chr[16] = { 0x0E,0x1F,0xBA,0x0E,0x00,0xB4,0x09,0xCD,0x21,0xB8,0x01,0x4C,0xCD,0x21,0x57,0x69 };
const string str(chr); // First try
string str2 = static_cast<string>(chr); // Second try
cout << sizeof chr << endl; // size of the char
cout << "Converted: " << str << " Size: " << str.length() << endl; // length of converted char
cout << "Converted: " << str2 << " Size: " << str2.length() << endl; // length of converted char
此数据丢失的原因是什么?解决方法是什么?
答案 0 :(得分:2)
\0
被视为终止字符串
并且在
char chr[16] = { 0x0E,0x1F,0xBA,0x0E,0x00,0xB4,0x09,0xCD,0x21,0xB8,0x01,0x4C,0xCD,0x21,0x57,0x69 };
您的第五个字符是\0
。
因此仅使用前4个字符来构建字符串。
您可以通过使用字符串中的构造函数(可在其中指定大小)来修复它。
将const string str(chr);
替换为const string str(chr, 16);
0xB4
,0xCD
和0xB8
也不能容纳在char中,因为它们高于128