c++ - 从文件读取时更改字节顺序
问题描述
当有人阅读文件时,我试图更好地理解字节顺序。
我使用的机器是小端的。
下面的代码应该可以读取任何文件类型。
但是如果我们正在读取的文件是 UTF-16BE 编码的,我们应该在读取整个文件后改变字节顺序吗?
我问这个是因为我打算编辑文件的内容并将其输出到控制台中。
如果我们应该改变字节顺序,那该怎么做?
现在我正在阅读这样的文件:
std::ifstream file("/RANDOME/PATH/file.html", std::ios::in | std::ios::binary);
std::string result;
file.seekg(0, std::ios::end);
result.reserve(t.tellg());
file.seekg(0, std::ios::beg);
result.assign((std::istreambuf_iterator<char>(file)),
std::istreambuf_iterator<char>());
file.close();
我不知道如何在读取文件时将字节序从大更改为小。有人可以逐步向我展示如何正确完成吗?我只是想学习。我知道该文件使用的不是猜测的 UTF-16BE 编码。
解决方案
这是一些可以执行您想要的代码。请注意,此代码一次读取输入文件一行,而不是一口气读取所有文件。
#include <string>
#include <fstream>
void swap_bytes (char16_t *s)
{
while (*s)
{
unsigned char *uc = (unsigned char *) s;
unsigned char swap = *uc;
*uc = uc [1];
uc [1] = swap;
++s;
}
}
int main ()
{
std::basic_ifstream <char16_t> file ("/RANDOME/PATH/file.html", std::ios::in);
if (!file)
return 1;
std::basic_string <char16_t> line;
while (std::getline (file, line))
{
swap_bytes (line.data ());
// ...
}
file.close();
}
如果有任何不清楚的地方,请在评论中说出来。
推荐阅读
- javascript - 如何创建一个脚本,当用户右键单击特定图像时创建警报?
- python-xarray - 如何将 Zarr 数据转换为 GeoTiff?
- python - 如何在python字典中对嵌套字典的值求和
- .net - 现有连接被远程主机强行关闭。将内容复制到流时出错
- google-bigquery - Bigquery 错误“操作在 6.0 小时后超时”
- android-studio-arctic-fox - 我将android studio升级到最新版本后这是什么原因
- python - 通过识别列表值之间的重叠来组合列表并确保 Python 中列表之间的唯一性
- reactjs - 使用 Apache 和 React 应用程序的反向代理不起作用
- javascript - React Native Expo - iOS 自动填充密码在注册屏幕上弹出,如果您选择“选择我自己的密码”,它会清除但状态不会
- javascript - Woocommerce 如何使用 jquery 在“购物车小计”中获取值