Re: [問題]有關於取位元的問題已回收

看板MATLAB作者 (yadakaky)時間14年前 (2011/08/23 20:23), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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
再次感謝 QQ 謝謝您
08/23 23:12, 1F
文章代碼(AID): #1EKvlNGW (MATLAB)
文章代碼(AID): #1EKvlNGW (MATLAB)