【c编程小笔记】

【【【目录】】】

  1. 如何从本地某个csv中读取数据?
  2. 如何批量读取本地某个文件夹中的符合条件的所有csv?
  3. 如何批量读取本地多个文件夹中的符合条件的所有csv?
  4. 如何将矩阵保存到本地?
  5. 如何将数组保存成本地图片?
  6. 整型除法四舍五入
  7. MALLOC的用法与理解
  8. 用MALLOC申请一个100*100的矩阵空间
  9. 用MALLOC申请一个5个100*100的矩阵空间

定义一个数组:int16_t array[32]={0};
【1、如何从本地的某个csv中读取数据?】

char* pCharPathCsv = R"(E:\文件夹1\abc.csv)";
int16_t* pMat=NULL;
pMat = (int16_t*)MALLOC(100*100*sizeof(int16_t));
if(NULL == pMat)
	{printf("pMat MALLOC failed\n");}
int16_t  nWidth=100,nHeigth=100,nNumber=1;
if (0 != LoadCsvAll(pCharPathCsv,&pMat,nWidth,nHeight,nNumber))//这里的nNumber表示读取几帧
	{printf("LoadCsvALL() failed\n");}
//调试时,在imageWatch中使用@mem(pMat,int16,1,100,100,2*100)可以看到从csv中采集到的图像。  

【2、如何批量读取本地某个文件夹中的符合条件的所有csv?】

//===搜索此路径下,符合条件的所有csv===//
char* pCharPath = R"(E:\文件夹1)";
string strPath = pCharPath;
std::vector<string> csvList,pathCsvList;
FindSpeciFilesInFolder(strPath,"*20220811*.csv",csvList,1);
PathCsvList = csvList;
for(i=0;i<csvList.size();i++)
{
	PathCsvList[i] = strPath + csvList[i];
	printf("pathCsv:%s\n",PathCsvList[i].c_str());
}
//===申请空间,读出到mat中===//
int16_t* pMat=NULL;
pMat = (int16_t*)MALLOC(100*100*sizeof(int16_t));
if(NULL == pMat)
	{printf("pMat MALLOC failed\n");}
int16_t  nWidth=100,nHeigth=100,nNumber=1;
for(int16_t i=0;i<pathCsvList.size();i++)
{
	if (0 != LoadCsvAll(pCharPathCsv,&pMat,nWidth,nHeight,nNumber))
		{printf("LoadCsvALL() failed\n");}
	//===处理nMat===//
	......
}

【3、如何批量读取本地多个文件夹中的csv?】

//===搜索所有符合条件的路径===//
char* pCharPath = R"(E:\文件夹1)";
string strPath = pCharPath;
std::vector<string> pathList;//用于存储文件夹列表
GetFiles(strPath,"文件夹1",pathList);//查找符合条件的所有路径,不是查找文件的!//查找文件夹名中包含"文件夹1"的所有路径。
//===搜索所有路径下,符合条件的所有csv===//
std::vector<string> tempCsvList,tempPathCsvList,pathCsvList;
for(int16_t i=0;i<csvList.size();i++)
{
	FindSpeciFilesInFolder(pathList[i],"*20220811*.csv",tempCsvList,1);
	tempPathCsvList = tempCsvList;
	for(j=0;j<tempCsvList.size();j++)
	{
		tempPathCsvList[j] = pathList[i] + tempCsvList[j];
		printf("pathCsv:%s\n",pathCsv.c_str());
	}
	pathCsvList.insert(pathCsvList.end(),tempPathCsvList.begin(),tempPathCsvList.end());
}
//===申请空间,读出到mat中===//
int16_t pMat=NULL;
pMat = (int16_t*)MALLOC(100*100*sizeof(int16_t));
if(NULL == pMat)
	{printf("pMat MALLOC failed\n");}
int16_t  nWidth=100,nHeigth=100,nNumber=1;
for(int16_t i=0;i<pathCsvList.size();i++)
{
	if (0 != LoadCsvAll(pCharPathCsv,&pMat,nWidth,nHeight,nNumber))
		{printf("LoadCsvALL() failed\n");}
	//===处理nMat===//
	......
}

【4、如何将矩阵保存到本地?】

#include<fstream.h>
void SaveCsvU8(const string &pathCsv,const uint8_t* pMat,uint16_t row,uint16_t col)
{
	ofstream tempFileSysCsv(pathCsv);	//定义的tempFileSysCsv表示临时文件系统中的csv文件,指向pathCsv路径下的csv文件
	for(int i=0;i<row;i++)				//数据先写到tempFileSysCsv中,最后close时,统一写入本地磁盘空间pathCsv路径下的csv文件
	{
		for(int j=0;j<col-1;j++)
		{
			tempFileSysCsv<<to_string(pMat[i*col+j])<<",";
		}
		tempFileSysCsv<<to_string(pMat[(i+1)*col-1])<<","<<endl;
	}
	tempFileSysCsv.close();//关闭的时候,文件系统会将数据写入到磁盘的csv文件里
}
void SaveCsvU16(const string &pathCsv,const uint16_t* pMat,uint16_t row,uint16_t col)
{
	ofstream tempFileSysCsv(pathCsv);
	for(int i=0;i<row;i++)
	{
		for(int j=0;j<col-1;j++)
		{
			tempFileSysCsv<<to_string(pMat[i*col+j])<<",";
		}
		tempFileSysCsv<<to_string(pMat[(i+1)*col-1])<<","<<endl;
	}
	tempFileSysCsv.close();
}

【5、如何将数组保存成本地图片?】

saveToBMP((int_16 8)arrayAddr,"D:/文件夹1/myImage",0,0,cols,rows,DATA_SHORT);
保存后,图片名为myImage.bmp
注意:路径用的是反斜杠'/'

【6、整型除法四舍五入】

int a = 9;
int b = 2;
int ans1 = a / b; //没有四舍五入,输出为4
int ans2 = (a + b/2) / b;  //有四舍五入,输出为5

【7、MALLOC的用法与理解】

int *p = (int*)MALLOC(100*100*sizeof(int));
MALLOC说:"我要申请100个地址连续的小空间,每个空间大小正好能够存放一个int数据,将来存放int数据,
第一个小空间的地址我要交给指向int空间的 指针变量p"

int **pp=(int**)MALLOC(100*100sizeof(int*));
MALLOC说:"我要申请100个地址连续的小空间,每个空间大小正好能够存放某个int数据的地址,
第一个小空间的地址我要交给更高一级的 指针变量pp"

【8、用MALLOC申请一个100*100的矩阵空间】注:从高级指针低级指针申请

//定义一个二级指针变量,MALLOC申请100个连续行组长,把第一个组长的地址给 “矩阵总领”
int **mat = (int**)MALLOC(100*sizeof(int*));
for(i=0;i<100;i++)//给每个行组长分配1000个“基层小兵”,真正用来存储数据的就是“基层小兵”
{
    mat[i]=(int*)MALLOC(100*sizeof(int));
}

【9、用MALLOC申请一个5个100*100的矩阵空间】注:从高级指针低级指针申请

int ***mats = (int***)MALLOC(5*sizeof(int**));//申请了5个矩阵的“头”
for (n=0;n<5;i++)
{
    mats[n]=(int**)MALLOC(100*sizeof(int*));//申请了每个矩阵的行“头”
    for(i=0;i<100;i++)
    {
        mats[n][i]=(int*)MALLOC(100*sizeof(int));//为每个“行头”申请了100个小空间int
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值