首页 > 解决方案 > C ++字符串中的空字符?

问题描述

我想读取一个 txt 文件并将每行中的两个单元格转换为浮点数。

如果我第一次运行:

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 编码也会出现同样的问题。

发生了什么,我应该做些什么不同的事情?我应该以某种方式删除空字符吗?

标签: c++null-character

解决方案


“我想读一个txt文件”

文本文件的编码是什么?“文本”不是编码。我怀疑正在发生的事情是您编写的代码以 UTF8 或 Windows-1250 编码形式读取文件,并将其存储在std::string. 从字节中,我可以看到文件实际上是 UTF16BE,所以你需要读入一个std::u16string. 如果您的程序只能在 Windows 上运行,那么您可以使用std::wstring.

您可能有后续问题,但您最初的问题很模糊,我无法预测这些问题会是什么。


推荐阅读