Я делаю код на визуальном c++, чтобы читать (и видеть на консоли) плавающие числа из файла bin. Бинарный файл содержит около 2,5 миллионов чисел с плавающей запятой.
int main(){
char* holder;
ifstream fin;
fin.open("male_16_down.bin",ios::binary|ios::in);
if(!fin){
cout<<" Error, Couldnt find the file"<<endl;
}
fin.seekg(0,ios::end);
long int file_size_bin=fin.tellg();
long int file_size=fin.tellg();
fin.seekg(0,ios::beg);
file_size=file_size/sizeof(float);
holder=new char[file_size_bin];
fin.read(holder,file_size*sizeof(float));
float data=(float)atof(holder);
cout<<data<<endl;
delete[] holder;
Я знаю, что 4 байта для float и 1 байт для char, этот код выводит только одно число, atof()
0, я считаю, что atof()
преобразует только первый байт в число, но я хочу, чтобы весь номер был замечен и как можно я вижу все числа в двоичном файле, любая помощь будет высоко оценена.
#include <fstream>
#include <iostream>
int main() {
float f;
std::ifstream fin("male_16_down.bin", std::ios::binary);
while (fin.read(reinterpret_cast<char*>(&f), sizeof(float)))
std::cout << f << '\n';
return 0;
}
Надеюсь, вы планируете перенаправить вывод в файл, или потребуется некоторое время, чтобы распечатать 2,5 миллиона строк на консоли, но не обращая внимания на то, что это способ сделать то, что вы хотите.
#include <iostream>
#include <iomanip>
#include <fstream>
#include <vector>
int main()
{
//Generate a file with some floats in it for testing
std::ofstream fout("stuff.bin", std::ios::binary);
float f;
for(size_t i = 0; i < 100; ++i)
{
f = 3.14159f * i;
fout.write(reinterpret_cast<const char*>(&f), sizeof(f));
}
fout.close();
std::ifstream fin("stuff.bin", std::ios::binary);
if(!fin)
{
std::cout << " Error, Couldn't find the file" << "\n";
return 0;
}
fin.seekg(0, std::ios::end);
const size_t num_elements = fin.tellg() / sizeof(float);
fin.seekg(0, std::ios::beg);
std::vector<float> data(num_elements);
fin.read(reinterpret_cast<char*>(&data[0]), num_elements*sizeof(float));
for(size_t i = 0; i < data.size(); ++i)
{
std::cout << std::fixed << std::setprecision(3) << data[i] << "\n";
}
return 0;
}