将char数组转换为字符串时数据丢失

时间:2018-06-27 09:00:27

标签: c++ casting type-conversion

我正在使用两种不同的方式将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

此数据丢失的原因是什么?解决方法是什么?

1 个答案:

答案 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);

0xB40xCD0xB8也不能容纳在char中,因为它们高于128