我在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);
但它输出了同样奇怪的符号。有谁知道我能做什么?
答案 0 :(得分:0)
我尝试运行您提供的代码以及您的示例,但无法重现您所描述的问题:
longstr1='1 28895U 05043F 14195.24580016 .00000503 00000-0 10925-3 0 8188';
satrec.satnum = str2num(longstr1(3:7))
satrec =
satnum: 28895
无论如何,我建议使用textscan
或dlmread
之类的内容:
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!