# i have a single row vector contains 0s and 1s and want to convert every 3 bits into integer how can i do that??

1 view (last 30 days)
Aly Khafagy on 22 Apr 2022
Edited: Bruno Luong on 24 Apr 2022
i have a single row vector contains 0s and 1s and want to convert every 3 bits in this vector into integer how can i do that??
i have single row vector contains 0s and 1s values and i need every 3 bits in this vector convert to decimal number
for example
x=[0 1 0 1 1 1 ]
then i want this single row to be converted to decimel every 3 of them to decimal [010],[111]

Mathieu NOE on 22 Apr 2022
hello
see below
hope it helps
% dummy data
nbits = 3;
samples = 8;
x = round(rand(1,nbits*samples));
nbits_vect = 2.^((nbits-1:-1:0));
%%%% main loop %%%%
iter = fix((length(x)-nbits)/nbits +1);
for ci=1:iter
start_index = 1+(ci-1)*nbits;
stop_index = min(start_index+ nbits-1,length(x));
int_data(ci) = sum(nbits_vect.*x(start_index:stop_index)); % your interger data
end
figure(1),
plot(int_data,'r'); % your interger data
Bruno Luong on 24 Apr 2022
Edited: Bruno Luong on 24 Apr 2022
it's equivalent to the sequence
[100,10,1] but in base 2.

### More Answers (2)

Bruno Luong on 22 Apr 2022
x=[0 1 0 1 1 1 ];
bin2dec(char(reshape(x,3,[])+'0')')
ans = 2×1
2 7

Voss on 22 Apr 2022
Edited: Voss on 22 Apr 2022
You say you want [010,111] as a result:
x=[0 1 0 1 1 1 ];
xx = reshape(x,3,[]).';
y = zeros(1,size(xx,1));
for ii = 1:size(xx,1)
y(ii) = polyval(xx(ii,:),10);
end
disp(y)
10 111
If you want [2,7] as a result:
for ii = 1:size(xx,1)
y(ii) = polyval(xx(ii,:),2);
end
disp(y)
2 7