Asked by Jyothi Alugolu
on 8 Feb 2017

Hello, I have a cell of binary elements with 0's and 1's of size 1*1624..now i have to convert every 8 binary elements from 1624 elements into a decimal number and store in an array..so,the final output must be of size 1*203(each element in 203 must consists of the value of each 8 binary elements...can anyone help me please

Answer by Jan
on 8 Feb 2017

Accepted Answer

In = {0,1,1,1,0,0,1,0, 1,0,1,1,0,1,0,1}; % 1 x 16

M = reshape([In{:}], 8, []);

Out = [128, 64, 32, 16, 8, 4, 2, 1] * M;

Guillaume
on 8 Feb 2017

Ah, yes, even simpler with matrix multiplication.

Jyothi Alugolu
on 15 Feb 2017

Sign in to comment.

Answer by Thibaut Jacqmin
on 8 Feb 2017

Edited by Thibaut Jacqmin
on 8 Feb 2017

Here I create a cell of size 16 (and not 1624) as an example

a = {1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1};

Reshape the cell in a 8xN cell (N = 203 in your case)

a = reshape(a, [8, length(a)/8]);

Convert each column of 8 binary in a decimal number and store it in res

res = [];

for i = 1:size(a, 2)

res(end+1) = bi2de([a{:, i}]);

end

Thibaut Jacqmin
on 8 Feb 2017

Thibaut Jacqmin
on 8 Feb 2017

Jyothi Alugolu
on 10 Feb 2017

Sign in to comment.

Answer by Alexandra Harkai
on 8 Feb 2017

Considering it's a 1*1624 numeric array you have in the cell A, you can utilise bin2dec to do it after converting the numeric values to a string representation with num2str:

{bin2dec(num2str(reshape(A{:}, 8, size(A{:},2)/8)'))}'

Answer by Guillaume
on 8 Feb 2017

Edited by Guillaume
on 8 Feb 2017

Question: Why is the data in a cell array when a normal matrix would work just as well and make the code simpler? That is instead of:

binaryvector = {1, 0, 0, 1, 0, 1, 1, ...};

Have

binaryvector = [1, 0, 0, 1, 0, 1, 1, ...];

You also haven't told us which bit (1st or 8th) is the LSB and MSB.

Anyway, another way, probably the fastest, to convert your array:

binaryvector = num2cell(randi([0 1], 1, 1624)); %create a cell array of random bits for demonstration only. Use your own data

binaryvector = cell2mat(binaryvector); %convert cell array into matrix as cell array is pointless and just makes manipulating the bits harder

%in version R2016b ONLY:

decimalvector = sum(2.^(7:-1:0)' .* reshape(binaryvector, 8, []));

%in version prior to R2016b:

decimalvector = sum(bsxfun(@times, 2.^(7:-1:0)', reshape(binaryvector, 8, [])));

The above assumes the LSB is the 8th bit, if it's the first bit replace the 7:-1:0 by 0:7

Opportunities for recent engineering grads.

Apply Today
## 1 Comment

## Stephen Cobeldick (view profile)

## Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/323939-how-to-convert-binary-elements-of-a-cell-into-decimal-number#comment_427132

Sign in to comment.