Преобразовать десятичное число в двоичный вектор - PullRequest
9 голосов
/ 21 апреля 2011

Мне нужно преобразовать десятичное число в двоичный вектор

Например, что-то вроде этого:

  length=de2bi(length_field,16);

К сожалению, из-за лицензирования я не могу использовать эту команду. Есть ли какой-нибудь быстрый метод для преобразования двоичного в вектор.

Вот то, что я ищу,

If 
Data=12;
Bin_Vec=Binary_To_Vector(Data,6) should return me
Bin_Vec=[0 0 1 1 0 0]

Спасибо

Ответы [ 4 ]

18 голосов
/ 21 апреля 2011

Вы упоминаете, что не можете использовать функцию de2bi, что, вероятно, связано с тем, что она является функцией Инструментарий системы связи и у вас нет лицензии на Это. К счастью, вы можете использовать две другие функции, которые являются частью основного набора инструментов MATLAB: BITGET и DEC2BIN . Я обычно склоняюсь к использованию BITGET, поскольку DEC2BIN может быть значительно медленнее при одновременном преобразовании многих значений . Вот как бы вы использовали BITGET:

>> Data = 12;                  %# A decimal number
>> Bin_Vec = bitget(Data,1:6)  %# Get the values for bits 1 through 6

Bin_Vec =

     0     0     1     1     0     0
9 голосов
/ 21 апреля 2011

Один вызов встроенной функции Matlab dec2bin может достичь этого:

binVec = dec2bin(data, nBits)-'0'
7 голосов
/ 21 апреля 2011

Вот решение, которое достаточно быстрое:

function out = binary2vector(data,nBits)

powOf2 = 2.^[0:nBits-1];

%# do a tiny bit of error-checking
if data > sum(powOf2)
   error('not enough bits to represent the data')
end

out = false(1,nBits);

ct = nBits;

while data>0
if data >= powOf2(ct)
data = data-powOf2(ct);
out(ct) = true;
end
ct = ct - 1;
end

Для использования:

out = binary2vector(12,6)
out =
     0     0     1     1     0     0

out = binary2vector(22,6)
out =
     0     1     1     0     1     0
2 голосов
/ 02 июля 2014

Используете ли вы это для поля IEEE 802.11 SIGNAL? Я заметил "length_field" и "16". В любом случае вот как я это делаю.

    function [Ibase2]= Convert10to2(Ibase10,n)

    % Convert the integral part by successive divisions by 2
    Ibase2=[];


    if (Ibase10~=0)

    while (Ibase10>0)

    q=fix(Ibase10/2);
    r=Ibase10-2*q;
    Ibase2=[r Ibase2];
    Ibase10=q;
    end


    else
    Ibase2=0;
    end

    o = length(Ibase2);
    % append redundant zeros
    Ibase2 = [zeros(1,n-o) Ibase2];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...