gpt4 book ai didi

python - 无法从C++中的.dat文件提取实际数据?

转载 作者:行者123 更新时间:2023-12-01 14:58:13 25 4
gpt4 key购买 nike

我正在尝试从显示垃圾数据的c++中的.dat文件(文件中的数据为16位)中提取数据。我可以用python(下面提供的代码)提取它,但是我的工作要求它必须使用C++。这是我正在使用的C代码。
Image shows junk values on output console
Second image shows the actual data I was able to extract in python.
我也想知道什么是最快的数据提取方法,因为我的文件太大了。

#include<iostream>
#define N 4000
using namespace std;
struct record {
char details[1500];
};
int main(int argc, char** argv) {
FILE *fp = fopen("mirror.dat","rb");
record *records;
if (fp==NULL){
cout<<"Problem \n";
system("pause");
return -1;
}
records = new record[N];
fread((record *)records, sizeof(record),N,fp );
fclose(fp);
for(int i=0; i<N;i++){
cout<<"[" << i+1 << "]" << records[i].details << "\n";
}
system("PAUSE");
return 0;
}

以下是python代码。
fpath="mirror.dat"
with open(fpath, 'rb') as r_file:
data=r_file.read()
bits=[data[i+1]<<8 | data[i] for i in range(0, len(data),2)]
print(type(bits))
bits_decod = []
for k in bits:
bits_decod.append(k)
print((bits_decod))

最佳答案

在C++中,当您使用char打印<<数组时,它期望它是C样式的字符串。

您需要编写一个与Python脚本类似的对它进行解码的循环。

#include<iostream>
#define N 4000
using namespace std;
uint8_t data[N * 1500];
uint16_t bits[N * 750];
int main(int argc, char** argv) {
FILE *fp = fopen("mirror.dat","rb");
record *records;
if (fp==NULL){
cout<<"Problem \n";
system("pause");
return 1;
}
size_t data_len = fread((void *)data, sizeof(data),1,fp );
if (data_len < 0) {
cout << "Read error\n";
system("pause");
return 1;
}
fclose(fp);
for (int i = 0; i < data_len; i+=2) {
bits[i/2] = data[i+1] << 8 | data[i];
}
int bits_len = data_len / 2;
for(int i=0; i<bits_len;i++){
cout<<"[" << i+1 << "]" << bits[i] << "\n";
}
system("PAUSE");
return 0;
}

关于python - 无法从C++中的.dat文件提取实际数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59763953/

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