【问题标题】:Ascii .txt file to array of bytes - C++Ascii .txt 文件到字节数组 - C++
【发布时间】:2019-01-22 13:50:04
【问题描述】:

如何在 c++ 中将 ascii .txt 文件转换为字节数组? 例如,给定这个 .txt XYZ 坐标文件,将其转换为浮点表示的字节数组:

253.9999929 58.0428367 -21.3930063253
.9999929 59.0435773 -21.2499391255
...

转换为

bytes array[] = {
01000011,01111110,00000000,00000000,
01000010,01101000,00101011,11011101,
11000001,10101011,00100100,11100001,
00111111,01111111,11111111,10001001... etc

}

我想过将字符串中的每个数字转换为浮点数,然后提取二进制表示;但是,我不确定这是否有效。我需要使用包含 200000-1400000 行 XYZ 数据的 .txt 文件来大规模执行此操作。

谢谢!

【问题讨论】:

  • 这个“转换”的目的是什么?你为什么需要它?您需要解决的真实实际问题是什么?
  • 我有一个带有 XYZ 坐标的大 txt 文件。我的目标是获取这些数据并对其进行处理并将其转换为 BMP24 图像。到目前为止我一直在工作,但是速度太慢了。截至目前,我有一个 ifstream 一次读取每一行并处理它。我在想我可以使用多线程通过将其转换为字节数组并将其拆分为不同的域并将字节数组的不同部分分配给不同的线程来加速该过程。
  • 好吧,开始不是逐行阅读,而是分块阅读文档。我不认为多线程会帮助你,因为我猜你有 I/O 瓶颈
  • @CaseyPoon,如果您的程序运行正常但耗时太长,最好在the code review site 提问。发帖前请务必通读他们的how to ask page
  • 如果您确实想在 Code Review 上发布有关此内容的信息,请确保包含您的实际代码,否则会偏离主题。

标签: c++ file binary hex


【解决方案1】:

也许是这样的:

struct xyz{
    float x;
    float y;
    float z;
};

istream& operator >>(istream & is, xyz & v) {
    return is >> v.x >> v.y >> v.z;
}

std::ifstream f{"floats.txt"};

vector<xyz> floats;
copy(istream_iterator<xyz>{f}, {}, inserter(floats, end(floats)));

【讨论】:

    猜你喜欢
    • 2017-01-30
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    相关资源
    最近更新 更多