如何使MATLAB返回char而不是ASCII?

时间:2013-05-21 08:47:51

标签: matlab encoding ascii

所以,我正在使用AT命令和Matlab来返回来电显示,但这并不重要。

一切都很好,除了它返回ASCII数字这一事实,我不得不花时间将这个ASCII代码“翻译”成char,这样我才能知道它是什么意思。

>> s = serial('COM8');
>> fopen(s)
>> fwrite(s, [65 84 43 67 82 67 61 49 13])
>> s

   Serial Port Object : Serial-COM8

   Communication Settings 
      Port:               COM8
      BaudRate:           9600
      Terminator:         'LF'

   Communication State 
      Status:             open
      RecordStatus:       off

   Read/Write State  
      TransferStatus:     idle
      BytesAvailable:     47
      ValuesReceived:     0
      ValuesSent:         18

>> fread(s, 47)

它返回47个这样的ASCII数字(请注意我删除了大部分返回的代码):

ans =

    65
    84
    43
    67
    82
    67
    61
    49
    13

我尝试过以下事项:

char(fread(s,47))

z = fread(s,47)
char(z)

但是这些都不起作用

z = [65 84 43 67 82 67 61 49 13]
char(z)

工作正常。我想这是因为fread返回ASCII代码,它们之间有换行符,而不仅仅是我在上面的代码中写的空格。

3 个答案:

答案 0 :(得分:1)

尝试str2doublestr2num或者只从您拥有的ascii代码中减去'0'(字符'0'的ascii值)。

答案 1 :(得分:0)

以下是我从文件中读取时的方法 -

>> s = fopen('.gitignore') # Just a file in my current directory
>> z = fread(s,10)         # Returns a column of numbers
z =
    43
    97
    114
    98
   105
   116
   114
    97
   114
   121
>> char(transpose(z))      # You could write z' instead of transpose(z)
ans =
+arbitrary

其中“+任意”是我读过的文件的前10个字符。

答案 2 :(得分:0)

我使用了类来查明返回的类是serial。所以我发现了fgets并且效果很好。关于http://www.mathworks.com/help/matlab/ref/serial.fgets.html上的fgets的更多信息

这是输入/输出。

tline = fgets(s)
tline =
ATD0888123456