2010-04-22 5 views
10

I ont un tableau d'entiers:réseau entier de matrice binaire

a=[3,4,5,6,7]; 

Je veux le convertir en une matrice binaire de quatre bits chacun. Pour le tableau entier ci-dessus, je voudrais obtenir le tableau binaire suivant:

abinary=[0,0,1,1, 0,1,0,0, 0,1,0,1, 0,1,1,0, 0,1,1,1]; 

Y at-il moyen rapide de le faire?

Répondre

16

Matlab a la fonction intégrée DEC2BIN. Cela crée un tableau de caractères, mais il est facile de revenir aux nombres.

%# create binary string - the 4 forces at least 4 bits 
bstr = dec2bin([3,4,5,6,7],4) 

%# convert back to numbers (reshape so that zeros are preserved) 
out = str2num(reshape(bstr',[],1))' 
+0

Merci beaucoup Jonas !! ;) – asel

4

Vous pouvez utiliser la fonction BITGET:

abinary = [bitget(a,4); ... %# Get bit 4 for each number 
      bitget(a,3); ... %# Get bit 3 for each number 
      bitget(a,2); ... %# Get bit 2 for each number 
      bitget(a,1)];  %# Get bit 1 for each number 
abinary = abinary(:)';  %'# Make it a 1-by-20 array 
+0

Je ne savais même pas à propos de bitget. Je fais une boucle pour construire abinary, cependant, afin de pouvoir l'utiliser pour un nombre de bits. +1 de toute façon. – Jonas

1

Une réponse tardive je sais, mais a une fonction Matlab de le faire directement de2bi

out = de2bi([3,4,5,6,7], 4, 'left-msb'); 
+0

'de2bi' est uniquement disponible dans la [Boîte à outils système de communication] (https://uk.mathworks.com/help/comm/ref/de2bi.html). Une fonction similaire 'decimalToBinaryVector' existe dans la [Boîte à outils d'acquisition de données] (https://uk.mathworks.com/help/daq/ref/decimaltobinaryvector.html). – nekomatic