Matlab中字符串大小的预分配

Matlab中字符串大小的预分配,matlab,Matlab,我非常清楚如何使用1、0和cell命令预先分配矩阵大小,但是字符串呢 假设我有一个名为data的矩阵,其每个值现在都在1-255之间,如果我想打印这些数字的ASCII字符而不是它自己的数字,我会这样做 msg=''; for i = 1 : length(data) msg=horzcat(msg,floor(data(i))); % horzcat doesn't ignore spaces end msg 在上面的代码中,Matlab在循环结束之前不知道

我非常清楚如何使用1、0和cell命令预先分配矩阵大小,但是字符串呢

假设我有一个名为
data
的矩阵,其每个值现在都在1-255之间,如果我想打印这些数字的ASCII字符而不是它自己的数字,我会这样做

msg='';

    for i = 1 : length(data)
        msg=horzcat(msg,floor(data(i))); % horzcat doesn't ignore spaces
    end

msg
在上面的代码中,Matlab在循环结束之前不知道
msg
的大小,我真正想做的是在循环开始之前声明变量
msg
的大小


我该怎么做?

您可以使用
char
预先分配字符串,就像分配矩阵一样(字符串只是一个char数组):

然而,这可能不是您所需要的(我还没有看到任何人为任何东西预先分配字符串)。考虑到这是你想要做的

假设我有一个名为data的矩阵,如果我想打印这些数字的ASCII字符而不是它自己的数字,那么现在每个值都在1-255之间


您只需执行
char(data)
即可显示ASCII/Unicode值。

您可以使用
char
预分配字符串,就像预分配矩阵一样(字符串只是一个字符数组):

然而,这可能不是您所需要的(我还没有看到任何人为任何东西预先分配字符串)。考虑到这是你想要做的

假设我有一个名为data的矩阵,如果我想打印这些数字的ASCII字符而不是它自己的数字,那么现在每个值都在1-255之间


您只需执行
char(data)
即可显示ASCII/Unicode值。

Matlab中的字符串只是一个行向量。这有用吗?Matlab中的字符串只是一个行向量。这有帮助吗?我试过了,但它在显示为空格的字符串之前填充了不必要的0,这是因为循环没有覆盖原始向量值,而是将消息填充到该向量中。你说你没有看到任何人预分配字符串,我也没有。但是MatlabR2011B一直警告我要预先分配它的大小。我知道这不值钱,但我只想把它拿走warning@Xufyan正如我所说,这可能不是您需要的,但我回答了您提出的问题,即:“如何在MATLAB中预先分配字符串”。我不完全知道您想要做什么,因为您的代码示例不清楚,所以我按照您在文本中所说的去做。您是否按照我的建议尝试过
char(data)
?这是您试图在
horzcat
行中使用
msg
的最佳解释(该行一次将字符串增加一个字符)。如果在
数据中有浮点数,而不是整数,请执行
char(floor(data))
@SufiyanGhori如果要加速,您可能必须开始将其作为字节数组写入…我尝试了这一方法,但它在显示为空格的字符串之前填充了不必要的0,这是因为循环没有覆盖原始向量值,而是将消息填充到该向量中。您说您没有看到任何人预分配字符串,我也没有。但是MatlabR2011B一直警告我要预先分配它的大小。我知道这不值钱,但我只想把它拿走warning@Xufyan正如我所说,这可能不是您需要的,但我回答了您提出的问题,即:“如何在MATLAB中预先分配字符串”。我不完全知道您想要做什么,因为您的代码示例不清楚,所以我按照您在文本中所说的去做。您是否按照我的建议尝试过
char(data)
?这是您试图在
horzcat
行中使用
msg
的最佳解释(该行一次将字符串增加一个字符)。如果在
数据中有浮点数,而不是整数,请执行
char(floor(data))
@SufiyanGhori如果要加速,可能必须开始将其作为字节数组写入。。。
msg = char(zeros(100,1));