matlab与C#混合编程:数据类型转换关键问题

数据类型转换的测试例子

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MathWorks.MATLAB.NET.Arrays; //引用 MWArray.dll

namespace MatlabCallCsharpDll
{
    public class Test
    { 
        public static string showMWArray( )
        {
            double[] data = new double[] {  1.0, 2.32, 3 ,3.432,12,42};
            MWArray array1 = new MWNumericArray(2, 3, data); //2行3列矩阵。
            MWArray array = new MWNumericArray(data);  //得到matlab的数据类型矩阵,是基类。只有tostring和toarray方法
            MWNumericArray tempArr = (MWNumericArray)array; //得到matlab与C#中间类型。继承于MWArray。有
            Array CSArr = tempArr.ToArray();    //中间类型数组不能直接转换成cs具体类型的数组,如int[]等。   
            double num = tempArr[1].ToScalarDouble();
            double[,] doubleArr = (double[,])CSArr; //cs数据类型的强制转换。
           num = doubleArr[0,0]; //2.32  等价于  num = tempArr[1].ToScalarDouble();
            return num.ToString();
        }
    }
}

简单的matlabHelper

依据上面的测试例子,将常用的matlab数据类型转化成C#数据类型方法封装为单独的help类,以便开发人员直接调用该help类。而不用知道matlab相关知识。


 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MathWorks.MATLAB.NET.Arrays; 
 
namespace MatlabCallCsharpDll.wordHelper
{
  public  class WordHelper
    {
    /// <summary>
        /// 将matlab数组矩阵转换成双精度小数数组
        /// </summary>
        /// <param name="matrix">将matlab数组矩阵,如 outMatrix=[1.75,2.68,3.36;4,5.35,6.23];</param>
        /// <returns>成功:双精度小数数组,错误:null</returns>
        public static double[,] matrix2DoubleArray(MWArray matrix)
        {
            if (matrix!=null)
            {
                MWNumericArray tempArray = (MWNumericArray)matrix;
                double[,] res = (double[,])tempArray.ToArray();
                return res;
            }
            else
            {
                return null;
            }
           
        }
    
  /// <summary>
        /// 将matlab数组矩阵转换成整数数组
        /// </summary>
        /// <param name="matrix">matlab数组矩阵</param>
        /// <returns>成功:整数数组,失败:null</returns>
        public static int[,] matrix2IntArray(MWArray matrix)
        {
            if (matrix!=null)
            {
                MWNumericArray tempArray = (MWNumericArray)matrix;
                int[,] res = (int[,])tempArray.ToArray();
                return res;
            }
            else
            {
                return null;
            }
            
        }


   /// <summary>
        /// matlab字符串矩阵转换成C#字符串
        /// </summary>
        /// <param name="matlabStr">matlab字符串矩阵,如 outString = 'zhang_yang';</param>
        /// <returns>成功:str;失败:null</returns>
        public static string MatlabStr2csStr(MWArray matlabStr)
        {
            if (matlabStr!=null)
            {
                MWCharArray arr = (MWCharArray)matlabStr;
                string str = arr.ToString();
                return str;
            }
            else
            {
                return null;
            }
        }
}
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值