bitget function is not invoking output bits in a vector

k=k+1; %% k is counter and its chainging even more than (length(A))
for t = 1:1:length(A) %% A is a vector contains 8 elements
recovered_bits(1,k)= bitget(A(1,t),1); % extract LSB of each element in array and put them (LSB) in recovered_bits vector
k=k+1;
end
%% Output ----> recovered_bits = [] knowing that i trying to preallocate the vector previously

3 件のコメント

KALYAN ACHARJYA
KALYAN ACHARJYA 2018 年 11 月 26 日
What is A here?
madhan ravi
madhan ravi 2018 年 11 月 26 日
編集済み: madhan ravi 2018 年 11 月 26 日
See PREALLOCATION it improves code efficiency
Anmar Mohammed
Anmar Mohammed 2018 年 11 月 26 日
A is a vector contain 8 pixels consider it double

サインインしてコメントする。

 採用された回答

madhan ravi
madhan ravi 2018 年 11 月 26 日
編集済み: madhan ravi 2018 年 11 月 26 日

0 投票

You don't need a counter for this case , please pre-allocate before loop!
recovered_bits=cell(1,length(A)); %proper pre-allocation
for t = 1:length(A)
recovered_bits{t}= bitget(A(1,t),1);
end
[recovered_bits{:}]

2 件のコメント

Anmar Mohammed
Anmar Mohammed 2018 年 11 月 26 日
編集済み: Anmar Mohammed 2018 年 11 月 26 日
Thanks for sharing, it really helped, the k is needed simply because the code above is invoked in a bigger problem within functions, thank you all for helping me, greetings.
madhan ravi
madhan ravi 2018 年 11 月 26 日
Anytime :), see Steven Lords answer which is the efficient way to do what you are doing

サインインしてコメントする。

その他の回答 (2 件)

Steven Lord
Steven Lord 2018 年 11 月 26 日

1 投票

Why loop?
r = randi([0 intmax('int8')], 8, 1, 'int8');
recovered_bits = bitget(r, 1);
result = [r, recovered_bits, mod(r, 2)]
The second and third columns of result should be the same.

1 件のコメント

Anmar Mohammed
Anmar Mohammed 2018 年 11 月 26 日
編集済み: Anmar Mohammed 2018 年 11 月 26 日
hi, am working on image steganography.. i used loop because i needed the first LSB or i may need the second or the third LSBs.. the output depend on other parameters with entire recieved image.. your code is intersting i tried to have the fist 3 LSBs using your modified code but an error ocured concerning input size, any suggestions are much preciated, thanks in advance.
r = randi([0 intmax('uint8')], 8, 1, 'uint8');
recovered_bits = bitget(r, 1:3,'uint8');
result = [r, recovered_bits]
Error using bitget
Inputs must have the same size.

サインインしてコメントする。

KALYAN ACHARJYA
KALYAN ACHARJYA 2018 年 11 月 26 日
編集済み: KALYAN ACHARJYA 2018 年 11 月 26 日

0 投票

Initiallize k=1, otherwise K is not defined
k=1; %% k is counter and its chainging even more than (length(A))
for t = 1:1:length(A) %% A is a vector contains 8 elements
recovered_bits(1,k)= bitget(A(1,t),1); % extract LSB of each element in array and put them (LSB) in recovered_bits vector
k=k+1;
end

2 件のコメント

KALYAN ACHARJYA
KALYAN ACHARJYA 2018 年 11 月 26 日
編集済み: KALYAN ACHARJYA 2018 年 11 月 26 日
For example I have choosen different A
A=[4 6 7 4 3 0 8 4];
for t=1:1:length(A) %% A is a vector contains 8 elements
recovered_bits(t)=bitget(A(1,t),1); % extract LSB of each element in array and put them (LSB) in recovered_bits vector
end
%% Output ----> recovered_bits = [] knowing that i trying to preallocate the vector previously
disp(recovered_bits);
Anmar Mohammed
Anmar Mohammed 2018 年 11 月 26 日
Oh.. am sorry it's already initialized and its K=1 not K=k+1 as wrote above, my bad.

サインインしてコメントする。

カテゴリ

ヘルプ センター および File ExchangeMATLAB についてさらに検索

タグ

質問済み:

2018 年 11 月 26 日

編集済み:

2018 年 11 月 26 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by