Convert Decimal to Binary Vector

前端 未结 4 791
暗喜
暗喜 2021-01-05 01:13

I need to convert a Decimal Number to a Binary Vector

For example, Something like this:

  length=de2bi(length_field,16);

Unfortunat

相关标签:
4条回答
  • 2021-01-05 01:49

    Here's a solution that is reasonably fast:

    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
    

    To use:

    out = binary2vector(12,6)
    out =
         0     0     1     1     0     0
    
    out = binary2vector(22,6)
    out =
         0     1     1     0     1     0
    
    0 讨论(0)
  • 2021-01-05 01:56

    Are you using this for IEEE 802.11 SIGNAL field? I noticed "length_field" and "16". Anyway here's how I do it.

        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];
    
    0 讨论(0)
  • 2021-01-05 02:04

    A single call to Matlab's built-in function dec2bin can achieve this:

    binVec = dec2bin(data, nBits)-'0'
    
    0 讨论(0)
  • 2021-01-05 02:11

    You mention not being able to use the function de2bi, which is likely because it is a function in the Communications System Toolbox and you don't have a license for it. Luckily, there are two other functions that you can use that are part of the core MATLAB toolbox: BITGET and DEC2BIN. I generally lean towards using BITGET since DEC2BIN can be significantly slower when converting many values at once. Here's how you would use 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
    
    0 讨论(0)
提交回复
热议问题