matlab中的字符串转换不适用于int值

时间:2014-07-16 07:03:29

标签: matlab parsing string-conversion

我在matlab中解析longstrings,每当我使用带有int的str2num时它都不起作用,它会输出一个奇怪的中文或希腊符号。

satrec.satnum = str2num(longstr1(3:7)); 

我通过将其输出为字符串进行检查,它运行正常,但如果我没有设法将其更改为int,我将无法在以后的计算中使用它。我的字符串中的字符3到7是整数(例如:8188)。因为看起来我的琴弦是双打的,所以我尝试了这个:

satrec.satnum = longstr1(3:7);  
satrec.satnum = strcat(satrec.satnum,'.0');
satrec.satnum = str2num(satrec.satnum);
fprintf('satellite number : %s\n',satrec.satnum);

但它输出了同样奇怪的符号。有谁知道我能做什么?

2 个答案:

答案 0 :(得分:0)

我尝试运行您提供的代码以及您的示例,但无法重现您所描述的问题:

longstr1='1 28895U 05043F 14195.24580016 .00000503 00000-0 10925-3 0 8188';
satrec.satnum = str2num(longstr1(3:7))

satrec = 

    satnum: 28895

无论如何,我建议使用textscandlmread之类的内容:

Data = textscan(longstr1,'%u8 %u16 %c %u16 %c %f %f %u16-%u8 %u16-%u8 %u8 %u16', 'delimiter', '')

Data = 

  Columns 1 through 9

    [1]    [28895]    'U'    [5043]    'F'    [1.4195e+04]    [5.0300e-06]    [0]    [0]

  Columns 10 through 13

    [10925]    [3]    [0]    [8188]

在上面的示例中,我猜测了一些数据类型,因此您应该更新它们以供您使用。 如您所见,此代码适用于字符串。但是,如果您使用fileID提供它,它将使用此模板读取文件中的所有行(see documentation for textscan)。

旁注:我注意到char(28895)输出了一个中文字符。

答案 1 :(得分:0)

这看起来像NORAD 2行元素数据。在这种情况下,文件编码是US-ASCII或有效的UTF-8,因为不应该存在非ASCII字符。

您的问题似乎在这一行:

fprintf('satellite number : %s\n',satrec.satnum);

satrec.satnum是一个整数,但是您在格式字符串中使用%s字符打印它,因此Matlab将其解释为字符串。将其替换为

fprintf('satellite number : %d\n',satrec.satnum);

你得到了正确的结果。

已编辑添加

Matlab实际上已经正确地将字符串转换为int!