Потеря данных при преобразовании массива char в строку - PullRequest
0 голосов
/ 27 июня 2018

Я использую два разных способа преобразования char array в string, но оба возвращают 4 как length строки, в то время как размер символа равен 16:

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 голосов
/ 27 июня 2018

\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 не помещаются в символ, так как они выше 128

...