gpt4 book ai didi

c++ - 从 Dukascopy tick 二进制文件中读取数据

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:11:25 25 4
gpt4 key购买 nike

我已经下载了 Dukascopy 报价数据,并使用 eaylzma 库对其进行了解压。原始压缩二进制文件为 EURUSD/2010/00/08/12h_ticks.bi5 (EURUSD/2010/ian/8/12h) 解压后得到如下格式:

+-------------------------+--------+-------+
| time | Bid | Ask |
+-------------------------+--------+-------+
000003CA 00022EC0 00022EB6 40CCCCCD 41180000
000004F5 00022EB6 00022EB1 4099999A 404CCCCD

(您可以从以下位置下载原始压缩文件: EURUSD/2010/00/08/12h_ticks.bi5 .用lzma解压后得到文件: 12h_ticks )

读取二进制文件:

int ii1;
int ii2;
int ii3;
float ff1;
float ff2;
ifstream in("12h_ticks",ofstream::binary);
in.read((char*)(&ii1), sizeof(int));
in.read((char*)(&ii2), sizeof(int));
in.read((char*)(&ii3), sizeof(int));
in.read((char*)(&ff1), sizeof(float));
in.read((char*)(&ff2), sizeof(float));
std::cout << " ii1=" << ii1 << std::endl;
std::cout << " ii2=" << ii2 << std::endl;
std::cout << " ii3=" << ii3 << std::endl;
std::cout << " ff1=" << ff1 << std::endl;
std::cout << " ff2=" << ff2 << std::endl;
in.close();

我得到以下结果:

ii1=-905773056
ii2=-1070726656
ii3=-1238498816
ff1=-4.29492e+08
ff2=8.70066e-42

怎么了?我无法从二进制文件中读取数据。请帮助我。

最佳答案

数据似乎以大端格式存储在文件中。加载时需要将其转换为小端。

#include <iostream>
#include <fstream>
#include <algorithm>

template<typename T>
void ByteSwap(T* p)
{
for (int i = 0; i < sizeof(T)/2; ++i)
std::swap( ((char *)p)[i], ((char *)p)[sizeof(T)-1-i] );
}

int main()
{
int ii1;
int ii2;
int ii3;
float ff1;
float ff2;
std::ifstream in("12h_ticks",std::ofstream::binary);
in.read((char*)(&ii1), sizeof(int));
in.read((char*)(&ii2), sizeof(int));
in.read((char*)(&ii3), sizeof(int));
in.read((char*)(&ff1), sizeof(float));
in.read((char*)(&ff2), sizeof(float));

ByteSwap(&ii1);
ByteSwap(&ii2);
ByteSwap(&ii3);
ByteSwap(&ff1);
ByteSwap(&ff2);

std::cout << " ii1=" << ii1 << std::endl;
std::cout << " ii2=" << ii2 << std::endl;
std::cout << " ii3=" << ii3 << std::endl;
std::cout << " ff1=" << ff1 << std::endl;
std::cout << " ff2=" << ff2 << std::endl;
in.close();
return 0;
}

结果如下:

ii1=970
ii2=143040
ii3=143030
ff1=6.4
ff2=9.5

如果您想阅读有关该主题的更多信息,我从此处获取了 ByteSwap 函数。 How do I convert between big-endian and little-endian values in C++?

关于c++ - 从 Dukascopy tick 二进制文件中读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14035808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com