首页 > 编程知识 正文

matlab大小端转换,matlab大端小端数据格式转换

时间:2023-05-05 04:58:26 阅读:193851 作者:610

小端模式:内存的低地址存数据的低位,内存的高地址存数据的高位。低低高高。 2,大端模式:内存的低位存数据的高位,内存的高地址存数据的低位。 低高高低

使用matlab实现了小端模式的数据处理,并且将处理后的数据写入到excel表格中,大端处理方式类似。

处理前 处理后

读取设备的值,按小段模式存储,需要分析其数据进行滤波处理

读取通道1 通道2 通道3的数据将两个字节的数据 小端模式转化为十进制% 1,小端模式:内存的低地址存数据的低位,内存的高地址存数据的高位。低低高高。 2,大端模式:内存的低位存数据的高位,内存的高地址存数据的低位。 低高高低% 最高位为符号位,正数为0 负数为1% 小端模式:先传过来小的,再传大的, E5 FD,低字节为E5 高字节为FD% 原始数据,数据格式是: 0xAA + 通道1(2byte 小端)+ 通道2(2byte 小端)+ 通道3(2byte 小端)+ checksum(2byte)% 处理后将数据写入到.xlsx表格中function Main()global runallrunall = 1; % 0 只读取其中一个文件 1:读取文件夹下所有的文件[filename, pathname] = uigetfile('*.*', '选择数据文件','MultiSelect', 'on'); %选择文件if isequal(filename,0) ; return;endif runall == 1 list = dir([pathname,'*.txt']); list_len = length(list); for i = 1:list_len filename = list(i).name; ReadData(pathname, filename); endelse ReadData(pathname, filename);endend%读取通道1 通道2 通道3的数据function ReadData(pathname, filename) fileName = fullfile(pathname, filename); data_struct = importdata(fileName); if isequal(class(data_struct), 'struct') data = data_struct.textdata; else data = data_struct; end k = 1; % k为处理数的index for i =1:length(data) j=1; while j < length(data{i}) - 1 %AA E5 FD E3 FF 0A 00 D2 FD if isequal(data{i}(j:j+1), 'AA') % 处理以AA开头的后面的数字 if 1 second_data = hex2dec(data{i}(j+6:j+7)); % 将高位字节的两位数转为10进制 % 处理第一个通道的数字,先将低字节和高字节拼接 low_bit = data{i}(j+3:j+4); high_bit = data{i}(j+6:j+7); raw_data(k, 1) = Hex2Dec(second_data,low_bit, high_bit); % 处理第二个通道的数字,先将低字节和高字节拼接 symbol=hex2dec(data{i}(j+12:j+13)); low_bit = data{i}(j+9:j+10); high_bit = data{i}(j+12:j+13); raw_data(k, 2) = Hex2Dec(symbol,low_bit, high_bit); % 处理第三个通道的数字,先将低字节和高字节拼接 symbol=hex2dec(data{i}(j+18:j+19)); low_bit = data{i}(j+15:j+16); high_bit = data{i}(j+18:j+19); raw_data(k, 3) = Hex2Dec(symbol,low_bit, high_bit); else % 分别处理 second_data = hex2dec(data{i}(j+6:j+7)); % 将高位字节的两位数转为10进制 % 处理第一个通道的数字,先将低字节和高字节拼接 low_bit = data{i}(j+3:j+4); high_bit = data{i}(j+6:j+7); data_high_low = strcat(high_bit, low_bit); if(second_data > 127) % 最高位为1, 负数 raw_data(k, 1) = -(hex2dec('FFFF') - hex2dec(data_high_low)); else % 正数不需要处理 raw_data(k, 1) = hex2dec(data_high_low); end % 处理第二个通道的数字,先将低字节和高字节拼接 symbol=hex2dec(data{i}(j+12:j+13)); low_bit = data{i}(j+9:j+10); high_bit = data{i}(j+12:j+13); data_high_low = strcat(high_bit, low_bit); if(symbol > 127) % 最高位为1, 负数 raw_data(k, 2) = -(hex2dec('FFFF') - hex2dec(data_high_low)); else % 正数不需要处理 raw_data(k, 2) = hex2dec(data_high_low); end % 处理第三个通道的数字,先将低字节和高字节拼接 symbol=hex2dec(data{i}(j+18:j+19)); low_bit = data{i}(j+15:j+16); high_bit = data{i}(j+18:j+19); data_high_low = strcat(high_bit, low_bit); if(symbol > 127) % 最高位为1, 负数 raw_data(k, 3) = -(hex2dec('FFFF') - hex2dec(data_high_low)); else % 正数不需要处理 raw_data(k, 3) = hex2dec(data_high_low); end end k = k+1; j = j+ 25; else j=j+1; end end end % 将处理后的数字写入到对应的文件中 name = strsplit(filename,'.'); wfile = strcat(name(1),'.xlsx'); xlswrite(wfile{1},raw_data);end%将两个字节的数据 小端模式转化为十进制%symbol 符号位:提取高字节,判断最高位是0-正数,1-负数 %low_bit 低字节的数据 %high bit 高字节的数据 %eg:FD E5--> -538 data 返回转为10进制的数据function data = Hex2Dec(symbol,low_bit, high_bit) data_high_low = strcat(high_bit, low_bit); if(symbol > 127) % 最高位为1, 负数 data = -(hex2dec('FFFF') - hex2dec(data_high_low)); else % 正数不需要处理 data = hex2dec(data_high_low); endend

....

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。