bitget function is not invoking output bits in a vector

2 次查看(过去 30 天)
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

采纳的回答

madhan ravi
madhan ravi 2018-11-26
编辑:madhan ravi 2018-11-26
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
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
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.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Desktop 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by