2011-12-07 22 views
1

可能性の重複:
Converting binary to decimal without using loopMatlabのビット配列を整数に変換するには?

私が最も簡単かつ最速の解決策を探しています。私はドキュメンテーションを試みたが、何かを見つけることができた

私は[0,1,1,1]のようなビット配列を持っています。単純なint番号7に変換したいと思います。この配列はbitget(x、1:3)で取得します。整数。

+0

技術的にはこれは1552966とは多少異なる質問と解釈される可能性があります。ビットマスクの範囲から数値を取得する方法としてこの質問を解釈できるため、ビットマスクとビットシフトを使用して回答します – Jimbo

答えて

4

エドウィンの答え@Data Acquisition Toolboxの一部であるbinvec2decを使用しています。このトボックスは、Mathworksによって開発された追加のツールボックスですが、基本的なMATLABパッケージの一部ではありません。

ここでは、このツールボックスに依存しないソリューションです。

  1. 使用ストリング

    STR = num2strは(bin_vec)にバイナリ配列に変換するnum2strは

  2. BIN2DEC使用小数点値を取得する

    dec_num = BIN2DEC(STR)。ただ、@Edwinする教育的代替として、また@

+0

外部ですか?まあ、私はMatlabと一緒に仕事をして以来かなりの時間がかかりましたが、なぜ私が再びそれを使って作業しようとしているのかさえ分かりません。つまり、AskerがMatlabでの開発について真剣であれば、特に外部の第三者ではなく、言語提供者が提供する外部ライブラリを使用することに害はありません。 – Edwin

+0

@Edwin基本的なMATLABパッケージには、DAQツールボックスのような余分なツールボックスは含まれていません。たぶん私は余分な(言い換えられた言い回し) – Azim

+0

Matlabに付属していないとあなたは余分なそれを支払わなければならないという意味で外部を言う必要があります。 – mbatchkarov

1

Matlabでは少し錆びますが、これはうまくいくはずです。

% This assumes you're using a vector of dimension 1 x n (i.e. horizontal vector) 
% Otherwise, use flipud instead of fliplr 
function [dec_num] = convert(bin_vec) 
bin_vec = fliplr(bin_vec); 
dec_num = binvec2dec(bin_vec); 

% EDIT: This should still work 
num = convert(bitget(x, 1:3); 

今後の参考として、宿題については、宿題を使用してください。

binvec2dec Documentation
fliplr Documentation
flipud Documentation

9

(生産のための優れている)アジムのソリューションの、

b = [1 0 0 1]; % or whatever 
sum(b.*(2.^[length(b)-1 : -1 : 0])) % => 9 for the above 

我々は2.^[length(b)-1 : -1 : 0] = [8 4 2 1]と基本要素を作成してみてくださいバイナリ値によって各要素を乗算[8 0 0 1]を取得し、合計して最終的な回答を得ます。

+0

+1の教授法 – Azim

関連する問題