在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
具体使用方法如下图

2040






