我正在寻找一种从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, ']' ] ) %
答案 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的帖子是非常有帮助的:)