2014-01-17 52 views
2

INT16数据I来自加速计的数据记录读取该组的十六进制值的:读取在Matlab

35AC,2889,1899,0C4A,058B,FD46,F620,F001,EE44,EF08,EF46,F750, 007F,0814,1369,21F3,34F0,45CE,5992,6D05,7C12,7FEF,7FF8,7FF8,7FF8,7FF8,7FD9,7F27,74A7,67D8,5826,468F,3621,2573,1326,0441,F88F, F1BF,F082,EADB,EAEE,EE04,F190,F89E,01F5,0B0C,155A,2721,3A20,48DC,5985,676A,721E,7C20,7FF8,7FEE,7F1B,

它应该以某种方式绘制一个正弦曲线,但我无法找到有符号的int16的正确导入方法,曲线从0跳到65535.

你能帮我吗?

我已经试过sscanf(...,'%4x')

回答

0

sscanf格式签署的十六进制INT16只是'%4i'。不幸的是,它预计十六进制值将从0x开始,而您显然不会。一种可能性是您按原样扫描它,然后手动将其转换为带符号的int16。这样做的一种可能的方法是以下内容:被读取

input = sscanf(...,'%4x'); 
input16 = typecast(uint16(input),'int16'); 

的值作为一个UINT32并自动转换由sscanf功能加倍。因此,我们将它转​​换为uint16,然后将其转换为16位int(请注意,仅使用int16(input)不起作用,因为它不会将INT16_MAX上的值转换为负值)。

0
string = '35AC,2889,1899,0C4A,058B,FD46,F620,F001,EE44,EF08,EF46,F750,007F,0814,1369,21F3,34F0,45CE,5992,6D05,7C12,7FEF,7FF8,7FF8,7FF8,7FF8,7FD9,7F27,74A7,67D8,5826,468F,3621,2573,1326,0441,F88F,F1BF,F082,EADB,EAEE,EE04,F190,F89E,01F5,0B0C,155A,2721,3A20,48DC,5985,676A,721E,7C20,7FF8,7FEE,7F1B'; 
%// Your data as a string 

string = [string ',']; %// add ending comma to reshape into groups of five chars 
strings = reshape(string,5,[]).'; 
strings = strings(:,1:4); %'// each row is 4 chars representing a hex number 
numbers = hex2dec(strings); %// convert each row to a number 
ind = numbers>=32768; 
numbers(ind) = numbers(ind)-65535; %// get rid of jumps 
plot(numbers) 

enter image description here

0

感谢很多

两个以前的答案是there了。

sscanf替代方案假定速度更快。