将十六进制C数组转换为Matlab矢量

时间:2015-08-19 07:29:02

标签: c arrays matlab hex

我正在寻找一种从c代码十六进制数组转换为matlab的简单方法

可用的C代码格式: const uint16_t AUDIO_SAMPLE [] = {0x4952,0x4646,0x4f6e,0xf,0x4157,0x4556,0x6d66,0x2074,0x12,0,0x1}

必需的Matlab格式: AUDIO_SAMPLE = [18770 17990 20334 15 16727 17750 28006 8308 18 0 1]

虽然转换为小数字很简单,但我必须转换一个非常大的数组。我使用的是嵌入式平台,因此无法将数字写入简单的文本文件,以便以后在matlab中读取。最好在matlab中编写转换代码。

修改

直到现在能摆脱 0x 。使用eval函数后无法获得向量,如下所示:

a='0x4952, 0x4646, 0x4f6e'; %Given
b = strrep(a, '0x', '') ; %Returns 4952, 4646, 4f6e
x = eval( [ '[', b, ']' ] ) %

2 个答案:

答案 0 :(得分:1)

将定义数组的代码复制到名为" clip.h"。

的文件中

编写一个小型c程序<div ng-controller="generateHTMLCtrl" id="loadhere"> <script type="text/ng-template" id="tpl"> <a style="color:{{color}}; background-color:{{backgroundcolor}};" id="{{id}}" class="{{type}}" href="{{topage}}" ng-controller="{{controller}}" ng-click="{{function}}"> <i class="{{icon}}"><br></i>{{name}} </a> </script> </div> 并使用一个简单的循环以所需的格式写入数据。在台式计算机上运行该程序。它可能看起来像这样:

#include "clip.h"

该程序将在stdout上编写matlab代码,因此您需要将其重定向到所需的文件。

答案 1 :(得分:0)

事实证明它比我想象的更难。

文本文件的内容 audio.c

[locationManager requestAlwaysAuthorization];

给定文件每行有11个值。以下是将HEX值转换为十进制数的MATLAB代码:

4952, 4646, 0x4f6e, 0xf, 0x4157, 0x4556, 0x6d66, 0x2074, 0x12, 0, 0x1, 
0x2, 0xbb80, 0, 0xee00, 0x2, 0x4, 0x10, 0, 0x6166, 0x7463, 0x4, 
0, 0xd3cf, 0x3, 0x6164, 0x6174, 0x4f3c, 0xf, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

最后,我用逗号分隔的十进制值字符串如下:

fp = fopen('audio.c', 'rt');
C = textscan(fp, '%s', 'CommentStyle', '#', 'Delimiter', '');
fclose(fp);

C = regexp(C{:}, '\w+', 'match');
C = cellfun(@(x)strrep(x,'0x',''), C, 'UniformOutput', false);
C = cellfun(@(x)hex2dec(x), C, 'UniformOutput', false);
result=cell2mat(C)'
allOneString = sprintf('%d, ' , result)

当然以前关于SO的帖子是非常有帮助的:)