57 c++ 读取二进制文件: 以.raw后缀的TDF_Voxel_Size文件为例
0 引言
毕业设计中用到了.raw格式的文件,需要将该文件按照M*N*P的矩阵格式加载到内存中。采用 #include <fstream> 中的FILE* 加载,并针对数据占用字节数,以 float* f = (float*) buffer; 语句强制转换类型,得到规整的文本数据。最后,由于数据量超出了 vector.max_size(),采用三维vector对数据进行存储,完成加载目标。
1 输入输出
输入包含两个文件, 分别是:
1、bicycle000002.size文件,包含数据格式描述({m, n, p, q});
2、bicycle000002.raw,序列化存储矩阵中的每一个数。
期望的输出:
将上述.raw文件中的数以矩阵 m*n*p的形式读入到内存中。
2 demo
#include <iostream>
#include <fstream>
#include <string>
#include <vector> using namespace std; void ReadSizeFile(const char *file_path, int size[])
{
FILE *file;
file = fopen(file_path, "rt+");
if (!file) //条件不成立,则说明文件打开失败
{
fclose(file);
cout << "打开文件失败! " << endl;
}
fscanf(file, "Float32(%d, %d, %d, %d)", &size[], &size[], &size[], &size[]);
fclose(file);
}
void ReadTDFfile(const char *file_path, vector<vector<vector<float>>>& object_TDF_data, int size[]){
FILE *pFile;
long lSize;
char *buffer;
size_t result;
pFile = fopen(file_path, "rb");
if (pFile == NULL)
{
fputs("File error", stderr);
exit();
}
// obtain file size:
fseek(pFile, , SEEK_END);
lSize = ftell(pFile);
rewind(pFile); // 指针倒带至头
// allocate memory to contain the whole file:
buffer = (char *)malloc(sizeof(char) * lSize);
if (buffer == NULL)
{
fputs("Memory error", stderr);
exit();
}
// copy the file into the buffer:
result = fread(buffer, , lSize, pFile);
if (result != lSize)
{
fputs("Reading error", stderr);
exit();
} float* f = (float*)buffer;
/* the whole file is now loaded in the memory buffer. */
for(int i=; i< size[]; ++ i){
vector<vector<float>> column_row;
for(int j=; j< size[]; ++ j){
vector<float> row;
for(int k=; k<size[]; ++ k){
row.push_back(*f);
++ f;
}
column_row.push_back(row);
row.clear();
}
object_TDF_data.push_back(column_row);
column_row.clear();
}
// terminate
fclose(pFile);
free(buffer);
} int main()
{
const char *file_path_size = "bicycle000002.size";
int size[];
ReadSizeFile(file_path_size, size); vector<vector<vector<float>>> object_TDF_data;
const char *file_path_data = "bicycle000002.raw";
ReadTDFfile(file_path_data, object_TDF_data, size);
return ;
}
3 测试文件下载链接
我把相关project开源在了我的github上,欢迎下载。
https://github.com/2017Greg/myVscodeProject/tree/master
下载的时候请同时下载代码readTDF.cpp和测试文件 bicycle000002.size和bicycle000002.raw
57 c++ 读取二进制文件: 以.raw后缀的TDF_Voxel_Size文件为例的更多相关文章
- 用 C# 读取二进制文件
当想到所有文件都转换为 XML时,确实是一件好事.但是,这并非事实.仍旧还有大量的文件格式不是XML,甚至也不是ASCII.二进制文件仍然在网络中传播,储存在磁盘上,在应用程序之间传递.相比之下,在处 ...
- Android Studio的使用(十)--读取assets、Raw文件夹下文件,以及menu、drawable文件夹
1.直接在/src/main目录下面新建assets目录 2.接下来即可读取文件 3.读取Raw文件夹下文件也类似.首先在res文件夹下新建raw目录,然后放入需要的文件即可读取. 4.menu和dr ...
- 信息管理代码分析<二>读取二进制文件数据
first和end做为全局变量,分别指向链表的头和尾.建立链表的方式也比较简易,从二进制文件数据块中,依次从头到尾读取,每读取一个就建立一个结点. /*基本模型*/ EMP *emp1; while( ...
- Android读取asserts和raw文件夹下的文件
Android读取asserts和raw文件夹下的文件 经常需要用到读取“/res/raw”和"/asserts"文件夹下的文件,索性写成工具类方便以后使用. 一.raw文件夹下的 ...
- jdbc 读取oracle long raw 字段,里面存的是文本
jdbc 读取oracle long raw 字段,里面存的是文本 参考: http://singlewolf.iteye.com/blog/278769 http://blog.csdn.net/r ...
- android无后缀二进制执行文件替代apk实现程序功能
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha android无后缀二进制执行文件替代apk实现程序功能 实现将data/Android ...
- 将raw里面的数据库文件写入到data中
package com.city.list.db; import java.io.File; import java.io.FileNotFoundException; import java.io. ...
- Java基础知识强化之IO流笔记49:IO流练习之 复制指定目录下指定后缀名的文件并修改名称的案例
1. 复制指定目录下指定后缀名的文件并修改名称的案例 需求:复制指定目录下的指定文件,并修改后缀名. • 指定的文件是:.java文件. • 指定的后缀名是:.jad • 指 ...
- 使用Delphi读取网络上的文本文件,html文件
使用Delphi读取网络上的txt和html文件 可以使用两种方法: 1.下载文件,然后进行读取 下载文件的Delphi代码可以参考: http://www.delphibbs.com/delphib ...
随机推荐
- 同步类容器和并发类容器——ConcurrentMap、CopyOnWrite、Queue
一 同步类容器同步类容器都是线程安全的,但在某些场景中可能需要加锁来保证复合操作. 符合操作如:迭代(反复访问元素,遍历完容器中所有元素).跳转(根据指定的顺序找到当前元素的下一个元素).条件运算. ...
- 「FJOI2018」领导集团问题 解题报告
「FJOI2018」领导集团问题 题意:给你一颗\(n\)个点的带点权有根树,选择一个点集\(S\),使得点集中所有祖先的点权$\le \(子孙的点权,最大化\)|S|$(出题人语死早...) 一个显 ...
- 「题解」:$Smooth$
问题 A: Smooth 时间限制: 1 Sec 内存限制: 512 MB 题面 题面谢绝公开. 题解 维护一个队列,开15个指针,对应前15个素数. 对于每一次添加数字,暴扫15个指针,将指针对应 ...
- 【LeetCode 20】有效的括号
题目链接 [题解] 一道傻逼括号匹配题 [代码] class Solution { public: bool isValid(string s) { vector<char> v; int ...
- react 教程—核心概念
react 核心概念 : https://react.docschina.org/docs/getting-started.html(官网) 或 https://www.w3cschool.cn/ ...
- SAS市场研究应用介绍:组合/联合分析
SAS市场研究应用介绍:组合/联合分析 一 SAS市场研究模块介绍 市场研究是指研究组织(企业)与客户.公众三者关系的规律的过程,是市场营销领域中的一个重要元素.它把消费者.客户.公众和营销者通过信息 ...
- 转载:vue-cli 脚手架 安装
声明:本文转载自https://www.cnblogs.com/loveyaxin/p/7094089.html 一. node安装 1)如果不确定自己是否安装了node,可以在命令行工具内执行: n ...
- mybatis执行test07测试类却显示test05测试类调用的sql语句出错
1.测试类 @Test public void test07() { IStudentDao studentDao = new IStudentDaoImpl(); Student student = ...
- git常用操作笔记
这是我看了廖雪峰的git教程,写的笔记,仅作为一个学习的记录 一.大多数我们面临的是已经有一个进行中的项目了,我们只需克隆下来就可以了 1.安装git,安装完后,可输入git,回车,查看是否已安装 2 ...
- python初学者学习工具安装教程&安装步骤详解
一.python安装: 版本:3.6.8 下载地址:https://www.python.org/downloads/ 安装步骤截图: 1.点击python安装包,出现下图所示界面,注意勾选A ...