How to convert binary elements of a cell into decimal number
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Jyothi Alugolu
am 8 Feb. 2017
Kommentiert: Jyothi Alugolu
am 15 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
Akzeptierte Antwort
Jan
am 8 Feb. 2017
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;
2 Kommentare
Weitere Antworten (3)
Thibaut Jacqmin
am 8 Feb. 2017
Bearbeitet: Thibaut Jacqmin
am 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
5 Kommentare
Thibaut Jacqmin
am 8 Feb. 2017
You don't have to write 203 in the for loop. Indeed size(a, 2) already equals to 203 after reshaping.
Alexandra Harkai
am 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)'))}'
Guillaume
am 8 Feb. 2017
Bearbeitet: Guillaume
am 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
1 Kommentar
Siehe auch
Kategorien
Mehr zu Numeric Types finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!