我有一个整数向量,我想把它转换成一个数字。例如:
h = [1 2 4 3]; % after conversion res= 1243
k = [ 0 0 0 0]; % after conversion res=0000
l = [0 0 2 1]; % after conversion res=0021
我尝试使用此方法
b = [1 2 4 3];
res= str2num(strrep(num2str(b'), ' ', ''))
当向量的开头或结尾没有零时,此方法可以正常工作。但是当结尾或开始时有零时,str2num
正在移除它们。例如,对于向量k
,res=0
。对于向量l
,res=21
。
如何在开头和结尾保留零?
答案 0 :(得分:4)
至少对于Octave,您可以使用矢量化sprintf
将每个数组元素打印成字符串。
>> a = sprintf('%d', [0 0 1 2 3 4 0 0])
a = 00123400
很可能相同的代码也适用于MATLAB。不幸的是我现在无法测试它。
答案 1 :(得分:2)
最简单的方法是将数字直接转换为字符,方法是根据带有 48 的ASCII字符表进行偏移:
char(h + 48)
char(k + 48)
char(l + 48)
如果你的输入是一个矩阵(我建议你),你还需要cellstr
将字符矩阵转换为字符串的单元格数组:
h(1,:) = [1 2 4 3];
h(2,:) = [0 0 0 0];
h(3,:) = [0 0 2 1];
out = cellstr( char(h + 48) )
答案 2 :(得分:1)
您可以使用num2str()
和正则表达式regexprep()
来获得结果。
s1 = num2str(h)
s2 = num2str(k)
s3 = num2str(l)
数组直接转换为字符串,并产生以下输出。
s1 = 1 2 4 3
s2 = 0 0 0 0
s3 = 0 0 2 1
现在,我们可以使用正则表达式查找空格并将其替换为''
s1 = regexprep(s1,'\s+', '')
s2 = regexprep(s2,'\s+', '')
s3 = regexprep(s3,'\s+', '')
这会产生以下结果。
s1 = 1243
s2 = 0000
s3 = 0021
答案 3 :(得分:1)
在16b中,您可以使用新的字符串类。字符串构造函数将数值数组转换为相同维度的字符串数组。 Join将这些元素连接在一起。
>> b = [1 2 4 3];
>> string(b).join('')
ans =
string
"1243"
答案 4 :(得分:0)
h = [1 2 4 3];
k = [0 0 0 0];
l = [0 0 2 1];
strrep(num2str(h), ' ', ''); % this will return '1234'
strrep(num2str(k), ' ', ''); % this will return '0000'
strrep(num2str(l), ' ', ''); % this will return '0021'