Re: [問題]有關於取位元的問題已回收
※ 引述《billygunn (若鷹軍團-翔鷹)》之銘言:
: 請問有一個1xN大小的矩陣,依條件每次有可能取5-6個位元
: 有方法能在取完後接著進行取位元的動作嗎 @@
: EX: 011001010100011100
: 第一次取6bit後,第二次改取5個bit
: 原本寫的程式如下,可是每次到取五個bit之後,又會從6的倍數開始取位元
: 希望能有可以解決的方法,謝謝各位 QQ
: for i=1:length(secret)
: sp=0;
: if mod(i,6)~=0 %不是6倍數,繼續run到6倍數
: continue;
: elseif mod(i,6)==0
: secret_bit=num2str(secret((sp+1):(sp+i))); %當6倍數時執行
: numbit=sscanf(secret_bit,'%1d', [1,inf]);
: dec(row)=numbit(i-5)*2^5+numbit(i-4)*2^4+numbit(i-3)*2^3+
: numbit(i-2)*2^2+numbit(i-1)*2^1+numbit(i)*2^0;
: row=row+1;
: if dec(row-1)>=49 %如dec轉10-ary大於等於49時,改取5bits,轉10-ary
: secret_bit((sp+1):(sp+i))=[];
: secret_bit=num2str(secret((sp+1):(sp+(i-1))));
: numbit=sscanf(secret_bit,'%1d', [1,inf]);
: dec(row-1)=numbit(i-5)*2^4+numbit(i-4)*2^3+numbit(i-3)*2^2+
: numbit(i-2)*2^1+numbit(i-1)*2^0;
: sp=sp-1; %secret,update start position,因改取5bits所以減1。
: end
: end
: sp=sp+i %secret,update start position
: end
hi
幫你順了code 有問題再討論吧~
clc
clear all
% secret=['011000' '110010' '101000'];
sec = round(0 + (1-0).*rand(1000,1));
secret = num2str(sec(:))';
row=1;
pointer=1;
len=length(secret);
for i=1:len
if mod(i,6)==0
test49=base2dec(secret((i-5):i),2);
if(test49>=49)
secret_bit=secret(i-5:i-1);
secret=[secret(1:i) secret(i) secret(i+1:length(secret))];
else
secret_bit=secret(i-5:i);
end
dec(row)=base2dec(secret_bit,2);
pointer=i;
row=row+1;
end
end
%% the rest
len=length(secret);
for i=pointer:len
if mod(i,6)==0
test49=base2dec(secret((i-5):i),2);
if(test49>=49)
secret_bit=secret(i-5:i-1);
secret=[secret(1:i) secret(i) secret(i+1:length(secret))];
else
secret_bit=secret(i-5:i);
end
dec(row)=base2dec(secret_bit,2);
pointer=i;
row=row+1;
end
end
※ 編輯: yadakaky 來自: 114.42.52.98 (08/23 23:04)
推
08/23 23:12, , 1F
08/23 23:12, 1F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):