2015-04-22 3 views
0

Я хотел бы создать 10 битный двоичного значения путем конкатенации два 4-битное значения и один 2-битное значения. например: {2'b11,4'b1010,4'b1100}.Сочетанные двоичные данные в Matlab?

Как бы я мог достичь этого?

  • strcat (bin2b, bin4b, bin4b) результаты с конкатенации, но это результирующая будет рассматриваться как STRING по MLAB.

ответ

1

Довольно много вариантов там в зависимости от того, как вы хотите, чтобы ваш окончательный результат:

bin2b = '11' ; 
bin4b1 = '1010' ; 
bin4b2 = '1100' ; 

b10str = strcat(bin2b,bin4b1,bin4b2) %// 10 bit value as a string type 
b10str = [bin2b bin4b1 bin4b2]   %// 10 bit value as a string type (same than above, shorthand notation for concatenation) 

b10dec = bin2dec(b10str)    %// 10 bit value as a numeric type (decimal base) 

b10hex = dec2hex(bin2dec(b10str))  %// string type again (hexadecimal base) 

b10bitarray = de2bi(b10dec)    %// array of 10 boolean (each represent one bit) 

Это даст вам:

b10str = 
1110101100 
b10dec = 
    940 
b10hex = 
3AC 
b10bitarray = 
    0  0  1  1  0  1  0  1  1  1 

Примечание: На большинстве ПК, бинарное упорядочивание " нижний конец ". В зависимости от байтов, вы можете «перевернуть» ваш битовый массив перед преобразованием его, что может быть сделано с fliplr:

>> fliplr(b10str) 
ans = 
0011010111 

, а затем преобразовать, как указано выше

+0

Спасибо за решение. – Manojkumar

+0

Для переупорядочения бит мы можем использовать de2bi (b10dec, 'left-msb') – Manojkumar

+0

@Manojkumar. Это совершенно правильно. Однако он работает только с этой конкретной функцией/форматом. Это нормально, если это то, что вы используете. Опция 'fliplr' является более общей, поскольку она может работать с любым типом массива (логическим, числовым, символом и т. Д.). – Hoki

0

Насколько я знаю, лучшая работа заключается в том, чтобы написать функцию, которая делает это в C/C++/whatever, и использовать MEX API для вызова ее из Matlab.

Matlab не позволяет обрабатывать типы, которые на самом деле не поддерживаются таким образом, или если вы действительно хотите это сделать в Matlab, это будет очень уродливо и медленно.

Смежные вопросы