Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以用Matlab识别数据类型?_Matlab - Fatal编程技术网

是否可以用Matlab识别数据类型?

是否可以用Matlab识别数据类型?,matlab,Matlab,情况如下:我使用Matlab读取光谱仪创建的文件。为此,我使用以下简单代码: id=fopen(filename, 'r', 'l'); [realimag, ~] = fread(id, 'int32'); fclose(id); 我的问题是,现在我有了第二个光谱仪,它生成的文件需要使用fread函数中的“double”来读取。所以每次我都要修改代码。。。有没有办法知道什么是数据类型,这样我就不必每次都更改代码 提前谢谢。fread是读取文件,将其解释为二进制文件,即位序列。因

情况如下:我使用Matlab读取光谱仪创建的文件。为此,我使用以下简单代码:

id=fopen(filename, 'r', 'l');       
[realimag, ~] = fread(id, 'int32');
fclose(id);
我的问题是,现在我有了第二个光谱仪,它生成的文件需要使用fread函数中的“double”来读取。所以每次我都要修改代码。。。有没有办法知道什么是数据类型,这样我就不必每次都更改代码


提前谢谢。

fread
是读取文件,将其解释为二进制文件,即位序列。因此,您可以读取二进制数据流并根据自己的喜好对其进行解释,除非有人告诉您如何读取,否则您无法知道如何读取

尝试使用这些命令读取包含以下内容的文件

àéèìòù
它会起作用的,你会得到的

>> realimag

realimag =

  -320280096
   168491506
这毫无意义

如果你读得很认真

[realimag, ~] = fread(id, 'char');
然后你会得到

realimag =

   224
   233
   232
   236
   242
   249
    10
    10
你猜怎么着

>> int32('àéèìòù')

ans =

  1×6 int32 row vector

   224   233   232   236   242   249
那那两个十是什么?那么

>> char(10)

ans =

    '
     '
一条新路线

这只是说,当您读取二进制文件时,如何读取它是您的选择


显然,如果有人告诉您前n个字节包含一个字符串,该字符串告诉您如何读取文件的其余部分,那么情况就不同了。但是,同样,您必须知道,或者必须有人告诉您。

一个填充了
值的文件只是一个位序列,它将与两倍于
int32
值的正确序列相同。这真的是你需要回答的问题吗?相反,您可以通过依赖过程中的用户输入来解决问题,但这是一种比“每次都更改代码”更方便的输入,或者您可以使用文件名中的线索来确定文件来自何处。否则,您将不得不根据数字的大小进行有根据的猜测,
精度
值将产生最可信的结果。记住,
double
值和一对
int32
值中的最低有效位位于完全不同的位置,因此除非第二个光谱仪的值可能具有大于
int32
范围的量级(±2^31)然后,如果文件有足够的值,经过教育的猜测应该很容易,因为使用错误的精度读取的文件几乎肯定包含不可行的值。谢谢您的评论。这些文件与由同一软件创建的文件同名(只是版本不同),我希望避免用户输入,因为我以外的其他人会使用这些代码,而且他们可能不知道如何做正确的选择。但你让我觉得我可能有办法知道“realimag”的大小。因此,我将读取文件两次,并选择一个有良好的大小。谢谢你的主意!谢谢你的回答。不幸的是,文件开头没有字符串告诉我如何读取它。我知道我必须以我自己的方式阅读它,因为创建这些文件的软件文档(两个版本的软件相同,但版本不同…)。但是Will的评论让我认为我可能有办法知道“realimag”应该有多长,我将尝试从两种方式读取文件,并选择一个大小正确的文件。@Ronicent,我从来没有说过您的文件中有/应该有字符串或任何特殊的内容。我的观点是,“当按位读取文件时,是否有可能识别文件中的数据类型?”的答案是“否”,无论使用何种语言,原因很简单,即任何数据类型的值最终都只是一个位序列。因此,除非您能够判断将其解释为
double
s序列是否比将其解释为
char
s序列(或
unit8
,或…)更好,否则您不知道如何读取它。