c++ - 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 编码也会出现同样的问题。
发生了什么,我应该做些什么不同的事情?我应该以某种方式删除空字符吗?
解决方案
“我想读一个txt文件”
文本文件的编码是什么?“文本”不是编码。我怀疑正在发生的事情是您编写的代码以 UTF8 或 Windows-1250 编码形式读取文件,并将其存储在std::string
. 从字节中,我可以看到文件实际上是 UTF16BE,所以你需要读入一个std::u16string
. 如果您的程序只能在 Windows 上运行,那么您可以使用std::wstring
.
您可能有后续问题,但您最初的问题很模糊,我无法预测这些问题会是什么。
推荐阅读
- typescript - 如何在 Visual Studio 2019 中为 TypeScript 文件启用 ESLint?
- ruby - Jekyll:集合与数据文件
- c - 有没有更简单、更少机器级别的方式来表达或做与 (i & (1 << j)) 相同的事情?
- objective-c - UITableView 中的自定义单元格在 iOS 13 暗模式下无法正常工作
- apache-spark - 是否可以在 Spark 的内存数据帧中存储 5 天
- java - 如何在测试启动前修改 testNG DataProvider 数组对象(在 Saucelabs 中命名测试)
- javascript - 使用 jQuery 和 CSS3 的 TranslateX() 在将父元素滚动到视图中时显示元素
- python - 如何覆盖子类中的类变量?
- javascript - 如何将多个外部 Javascript 脚本合并为一个?
- azure - 在 Azure 中使用基于角色的授权时,如何允许服务帐户访问我的 REST API?