2011-04-21 27 views
9

necesito para convertir un número decimal en un vector binarioConvertir decimal a binario Vector

Por ejemplo, algo como esto:

length=de2bi(length_field,16); 

Desafortunadamente, debido a la concesión de licencias, no puedo utilizar este comando. ¿Hay alguna técnica corta y rápida para convertir un binario en un vector?

Aquí es lo que estoy buscando,

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

Gracias

Respuesta

7

he aquí una solución que es razonablemente rápido:

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 

de usar:

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

out = binary2vector(22,6) 
out = 
    0  1  1  0  1  0 
+0

Muchas gracias por su tiempo y ayuda oportuna. – Kiran

+0

@kirancshet: de nada. Agregué un poco de prueba de entrada para evitar un ciclo infinito. – Jonas

17

Usted mencionar que no es un para usar la función de2bi, que es probable porque es una función en el Communications System Toolbox y no tiene una licencia para ello. Afortunadamente, hay otras dos funciones que puede usar que forman parte de la caja de herramientas central de MATLAB: BITGET y DEC2BIN. Generalmente me inclino por usar BITGET desde DEC2BIN can be significantly slower when converting many values at once. Así es como se usaría 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 
+1

¡Oh, bien! +1 por conocer bien a Matlab :). Tenga en cuenta que pensé que el autor no podía usar 'dec2bin' y que acababa de escribir mal. Ni siquiera sabía que 'de2bi' en realidad existe. – Jonas

+1

+1 para un uso simple! Sin embargo, tenga en cuenta que muchos querrán llamar a 'fliplr (bitget (Data, 1: 6))' para obtener los números en el orden 'correcto'. Depende del uso del curso (: – chessofnerd

9

Una sola llamada a la función incorporada de Matlab dec2bin puede lograr esto:

binVec = dec2bin(data, nBits)-'0' 
+0

Muchas gracias, no sabía que dec2bin podría usarse para obtener un vector binario como este. – Kiran

2

¿Está utilizando esto para IEEE 802.11 campo de la señal? Noté "length_field" y "16". De todos modos, así es como lo hago.

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]; 
Cuestiones relacionadas