小端模式:記憶體的低位址存資料的低位,記憶體的高位址存資料的高位。低低高高。 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 runall
runall = 1; % 0 只讀取其中乙個檔案 1:讀取資料夾下所有的檔案
[filename, pathname] = uigetfile('*.*', '選擇資料檔案','multiselect', 'on'); %選擇檔案
if isequal(filename,0) ; return;end
if 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;
endk = 1; % k為處理數的index
for i =1:length(data)
j=1;
while j < length(data) - 1
%aa e5 fd e3 ff 0a 00 d2 fd
if isequal(data(j:j+1), 'aa') % 處理以aa開頭的後面的數字
if 1
second_data = hex2dec(data(j+6:j+7)); % 將高位位元組的兩位數轉為10進製
% 處理第乙個通道的數字,先將低位元組和高位元組拼接
low_bit = data(j+3:j+4);
high_bit = data(j+6:j+7);
raw_data(k, 1) = hex2dec(second_data,low_bit, high_bit);
% 處理第二個通道的數字,先將低位元組和高位元組拼接
symbol=hex2dec(data(j+12:j+13));
low_bit = data(j+9:j+10);
high_bit = data(j+12:j+13);
raw_data(k, 2) = hex2dec(symbol,low_bit, high_bit);
% 處理第三個通道的數字,先將低位元組和高位元組拼接
symbol=hex2dec(data(j+18:j+19));
low_bit = data(j+15:j+16);
high_bit = data(j+18:j+19);
raw_data(k, 3) = hex2dec(symbol,low_bit, high_bit);
else % 分別處理
second_data = hex2dec(data(j+6:j+7)); % 將高位位元組的兩位數轉為10進製
% 處理第乙個通道的數字,先將低位元組和高位元組拼接
low_bit = data(j+3:j+4);
high_bit = data(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(j+12:j+13));
low_bit = data(j+9:j+10);
high_bit = data(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(j+18:j+19));
low_bit = data(j+15:j+16);
high_bit = data(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);
endend
k = k+1;
j = j+ 25;
else
j=j+1;
endend
end% 將處理後的數字寫入到對應的檔案中
name = strsplit(filename,'.');
wfile = strcat(name(1),'.xlsx');
xlswrite(wfile,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
大小端模式
偶 注意 大小端的高低位資料是按位址來計算的。如0x1001,10是高位位元組,01是低位位元組。char s abcd a是高位位元組 所謂的大端模式,是指資料的低位 就是權值較小的後面那幾位 儲存在記憶體的高位址中,而資料的高位,儲存在記憶體的低位址中,這樣的儲存模式有點兒類似於把資料當作字串順...
大小端模式
所謂的大端模式,是指資料的低位 就是權值較小的後面那幾位 儲存在記憶體的高位址中,而資料的高位,儲存在記憶體的低位址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理 位址由小向大增加,而資料從高位往低位放 所謂的小端模式,是指資料的低位儲存在記憶體的低位址中,而數 據的高位儲存在記憶體的高位址中...
大小端模式
端模式 endian 的這個詞出自jonathanswift書寫的 格列佛遊記 這本書根據將雞蛋敲開的方法不同將所有的人分為兩類,從圓頭開始將雞蛋敲開的人被歸為bigendian,從尖頭開始將雞蛋敲開的人被歸為littileendian。小人國的內戰就源於吃雞蛋時是究竟從大頭 big endian ...