С ++ нулевые символы в строке? - PullRequest
0 голосов
/ 09 июля 2020

Я хочу прочитать текстовый файл и преобразовать две ячейки из каждой строки в числа с плавающей запятой.

Если я сначала запустил:

someString = someString.substr(1, tempLine.size());

А затем:

std::stof(someString)

преобразует только первое число в someString в число. Остальная часть строки потеряна. Когда я обрабатывал строку в своей среде IDE, я заметил, что ее копирование и вставка в кавычки дает мне "\u00005\u00007\u0000.\u00007\u00001\u00007\u00007\u0000", а не 57.7177.

Если я вместо этого сделаю:

std::string someOtherString = "57.7177"

std::stof(someOtherString)

Я получаю 57.7177.

Минимальный рабочий пример:

int main() {

std::string someString = "\u00005\u00007\u0000.\u00007\u00001\u00007\u00007\u0000";
float someFloat =  std::stof(someString);
return 0;
}

Такая же проблема возникает при использовании кодировки UTF-8 и -16.

Что происходит и что я должен поступить иначе? Должен ли я как-то удалить нулевые символы?

1 Ответ

3 голосов
/ 09 июля 2020

«Я хочу прочитать текстовый файл»

Какая кодировка текстового файла? «Текст» - это не кодировка. Я подозреваю, что происходит то, что вы написали код, который читается в файле как кодировка UTF8 или Windows -1250, и сохранили его в std::string. По байтам я вижу, что файл на самом деле UTF16BE, поэтому вам нужно прочитать его в std::u16string. Если ваша программа будет только когда-либо запускаться на Windows, тогда вы можете обойтись с std::wstring.

У вас, вероятно, есть дополнительные вопросы, но ваш исходный вопрос достаточно расплывчатый, чтобы я не могу предсказать, какими будут эти вопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...