2016-12-19 8 views
3

Учитывая массив целых чисел:быстрый способ для десятичного в двоичные преобразования

X = [1, 3, 3, 3,2,3 ,1,1,2,3] 

Я хочу, чтобы преобразовать каждое число в 4 разрядных двоичном эквивалент. Я сделал следующее, но результат неверен. Кажется, что MSB и LSB меняются на противоположные. Я пробовал использовать функцию MATLAB с decimal_to_bin =dec2bin(X), но даже этот вывод ошибочен.

Как это исправить?

X = [1, 3, 3, 3,2,3 ,1,1,2,3]; 
b = 4; 
lookup_table = generate_lookupTable(b); 
BinaryX = lookup_table(X,:); 



function result = generate_lookupTable(b) 

% generate binary code 

k = 2^b; 
result = zeros(k,b); 

for i=1:k 
    for j=1:b 
     result(i,j) = bitand(uint8(2^(j-1)),uint8(i-1))/uint8(2^(j-1)); 
    end 
end 

end 

Выход, который я получил, BinaryX

0 0 0 0 
0 1 0 0 
0 1 0 0 
0 1 0 0 
1 0 0 0 
0 1 0 0 
0 0 0 0 
0 0 0 0 
1 0 0 0 
0 1 0 0 

screenshot

+0

Если вы посмотрите на документацию для 'dec2bin', вы увидите, что она принимает два аргумента. Если вы называете его 'dec2bin (X, 4)', который должен дать желаемый результат. – Trogdor

+0

Код, который вы опубликовали, не запускается, поэтому вам нужно немного улучшить его, если вы хотите получить его, чтобы он работал – Trogdor

+0

@beak: Я пытаюсь реализовать таблицу поиска, и код предназначен для генерации поиска Таблица. Но ответ, возвращенный таблицей поиска, ошибочен –

ответ

4

Я думаю мензурку означает что-то вдоль этих линий:

% Your vector 
X = [1, 3, 3, 3,2,3 ,1,1,2,3]; 

% number of bits to use 
numbits = 4; 

% Create lookup table 
little_endian = true; 

LUT = dec2bin(0:15, numbits) == '1'; 
if ~little_endian 
    LUT = fliplr(LUT); end 

% The conversion 
bits = LUT(X(:) + 1, :) 

В качестве альтернативы, вы можете делать то, что dec2bin делает , но без всякой суеты d it:

bits = (rem(floor(X(:)*pow2(1-numbits:0)),2) == 1); 
+0

' dec2bin' создает массив символов, поэтому 'LUT = LUT - Может потребоваться «0». В качестве альтернативы, если OP имеет коммуникационную панель инструментов, они могут использовать 'de2bi', который дает числовые значения (смотрите окончание). – beaker

+0

@beaker, даже если это правда, я по-прежнему предпочитаю отвечать, используя только встроенные функции MATLAB - не каждый пришедший здесь googler будет иметь этот инструментарий. Кроме того, я намеренно преобразуется в 'logical' вместо' char', потому что хорошо, это просто имеет смысл :) OP также разместил таблицу в 'uint8', а не' char', поэтому я выбрал 'logical', потому что это числовая и имеет дополнительное преимущество быть либо '0', либо' 1', а не '255' или' A', или что-то глупое. –

+0

Извините, я не вижу, где вы делаете результаты 'dec2bin' логическими. Я согласен с 'de2bi', это просто альтернатива. – beaker

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