在Simulink中将double类型的数组转成ASCII码数组(TCP/IP通信)

在SImulink的外部模式下,很多内置函数都没法用,如果我想用Simulink中的TCP/IP模块进行通信,TCP/IP-Send必须输入是uint8类型的数组,这就需要转换,同时外部模式下的Simulink还不能用到字符串类型,这就使得转换很麻烦,所以下面写了一个程序,用来将double类型的数组转成ASCII码数组。用空格分割

首先创建一个Matlab Function模块,然后把下面的代码粘贴进去。

特别的,SImulink的输出端口不能变化,所以预先分配一定的内存,这里根据需要调整。后面空的部分都用空格填充。


function asciiArray = formatArrayToAscii(inputArray)
    
    % 预分配内存为40个字符的字符串,初始为空格字符,32是空格的ASCII码,这里根据需要调整大小
    asciiArray = uint8(ones(1,40)*32);
    k=1;
    for i=1:length(inputArray)
        num=inputArray(i);
        % 检查数字是否为负数
        isNegative = num < 0;
        if isNegative
            num = -num; % 取绝对值
            asciiArray(k)='-';
            k=k+1;
        end
        % 将数字分为整数部分和小数部分
        integerPart = floor(num);
        decimalPart = num - integerPart;
        
        % 先处理整数部分
        if integerPart==0
            asciiArray(k)=uint8(48); % 48是0的ASCII码
            k=k+1;
        end
        % 取出这个整数有多少位
        m=10^(floor(log10(abs(integerPart))));
        
        while m >= 1
            digit = integerPart/m;
            asciiArray(k)=uint8(digit + 48);
            k=k+1;
            integerPart=integerPart-floor(integerPart/m)*m;
            m=m/10;
        end
        asciiArray(k)=uint8(46);
        k=k+1;

        % 再处理小数部分
        decimal=3;  %保留的小数位数
        for j = 1:decimal
            % 将小数部分乘以10,并取整数部分
            decimalPartDigit = floor(decimalPart * 10);
            % 更新小数部分
            decimalPart = (decimalPart * 10) - mod(decimalPartDigit, 10);
            % 将数字转换为ASCII字符并添加到字符串
            asciiArray(k)=uint8(decimalPartDigit + 48);
            k=k+1;
        end
        asciiArray(k)=uint8(32);    % 这是空格
        k=k+1;
    end
    
    
end

具体使用方法如下图

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值