|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 eecsseudl 于 2013-4-29 10:03 编辑
clear all
clc
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 当 tempBitCount>8 时进行移位
arrayBitCount = 0;
arrayCount = 0;
tempBuff = 0;
%arrayBuf = 0;
%matlab中列优先
% 测试 :把 magic(5) 中的 25 个数据按照 6 bits 方式记录
data = magic(5);
[row,col] = size(data) ;
fid = fopen('magic5.dat','wb');
for i = 1:col
for j = 1:row
curData = data(j,i)
curNum = 5;
% 存入一个一维uint8数组arrayBuf
tempBuff = bitshift(tempBuff,curNum)+bitand(bitshift(1,curNum)-1,curData);
arrayBitCount = arrayBitCount + curNum;
while(arrayBitCount>7)
arrayBitCount = arrayBitCount - 8; % 每次 8 bits
tempData = bitshift(bitand(bitshift(255,arrayBitCount),tempBuff),-arrayBitCount);
%tempData = bitand(bitshift(255,arrayBitCount),tempBuff)/bitshift(1,arrayBitCount)
fwrite(fid,tempData,'integer*1'); % 把最高的 8 bits写入文件
arrayCount = arrayCount+1; %记录数组中,数组下标偏移
arrayBuf(arrayCount) = tempData;
tempBuff = bitand(tempBuff,bitshift(1,arrayBitCount)-1); % 将高8bits清空
end % end while
end % j
end % i
if(arrayBitCount>0)
tempData = bitshift(tempBuff,7-arrayBitCount);
fwrite(fid,tempData,'integer*1');
arrayCount = arrayCount+1; %记录数组中,数组下标偏移
arrayBuf(arrayCount) = tempData;
end;
fclose(fid);
由于magic(5)产生的数据最大值为 25,因此使用 5bits 就能完整的存放一个数据,这样实际需要的储存空间只需要
25*5/8个字节就足够!
|
-
-
encode.zip
712 Bytes, 下载次数: 0
, 下载积分:
资产 -2 信元, 下载支出 2 信元
|