How to convert binary elements of a cell into decimal number
4 次查看(过去 30 天)
显示 更早的评论
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
采纳的回答
Jan
2017-2-8
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 个评论
更多回答(3 个)
Thibaut Jacqmin
2017-2-8
编辑:Thibaut Jacqmin
2017-2-8
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 个评论
Thibaut Jacqmin
2017-2-8
You don't have to write 203 in the for loop. Indeed size(a, 2) already equals to 203 after reshaping.
Alexandra Harkai
2017-2-8
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
2017-2-8
编辑:Guillaume
2017-2-8
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
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Numeric Types 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!