[原创]MATLAB与C混合编程中遇到的小问题

最近的一个项目要处理大量存盘的二进制数据,之前考虑用MATLAB处理,实际运行发现读写速度太慢,几个
GB的数据要等很久,就考虑将这部分耗时且低效的工作用C完成,这就涉及到MATLAB和C的混合编程。C函数其实只有一个参数,即二进制文件存放路径(例如E:\data.dat),MATLAB程序只需将该路径传递给C即可,所以该参数是一个字符串。
用过C都知道,C中\代表转义字符,因此路径实际上要写成E:\data.dat,而MATLAB则是E:\data.dat,就在为此事而犯愁,怎么将一个\转换成\个时,在网上得到答案,C中的\实际上是给编译器写的,让它明白是\,而不是转义字符,当C完成编译后,传递给函数的字符串就不需要再转换了,因此这个小问题算是解决了。
按此,编写了相关的C代码如下:

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
	FILE *fp;
	unsigned char *file_path;	
	file_path= mxGetPr(prhs[0]);
	if((fp=fopen(file_path,"rb"))==NULL) 
	{
		printf("Can't open the file specified by MATLAB!\n");
		printf("%c,%c\n",file_path[0],file_path[3]);
		return;
	}

上面的代码,如果输入字符串为E:\data.dat,file_path[0],file_path[3]第一个输出为E,第二个没有输出;中间来回折腾多次,始终不对;
重新阅读MATLAB help文档,在mxcreatecharmatrixfromstr.c实例文件中发现了,传递字符串不能这样,应该改用mxArrayToString()函数,具体用法如下:

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
	FILE *fp;
	unsigned char *file_path;	
	file_path= mxArrayToString(prhs[0]);
	if((fp=fopen(file_path,"rb"))==NULL) 
	{
		printf("Can't open the file specified by MATLAB!\n");
		return;
	}

即能正确打开文件。

另外,MATLAB的m文件转换成exe文件,使用mcc -e filename.m语句,生成的exe运行时就不会产生黑屏现象。
PS:环境为MATLAB 2009b和Microsoft Visual C++ 2005 SP1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值