2014-09-12 4 views
1

У меня есть массив, например: A=[01 255 03 122 85 107];, и я хочу, чтобы распечатать содержимое каксодержимое массива отображается в парах

A= 
    FF 01 
    7A 03 
    6B 55 

В основном считаны из памяти. Есть ли какая-либо функция в MatLab lib? Мне нужно сделать это с минимальным использованием петель.

+0

Похоже [код гольф] (http://en.wikipedia.org/wiki/Code_golf) проблема;) - так что мое предложение было бы '([1,10] * reshape (A, 2, [])) ''(25 символов) – bdecaf

+0

' rot90 (reshape (A, 2, []), 3) '(24 символа) :-) @bdecaf –

+0

' A = [01 FF 03 7A 55 6B] 'не работает с MATLAB. – Divakar

ответ

2

Используйте это -

str2num(num2str(fliplr(reshape(A,2,[])'),'%1d')) 

Выход -

ans = 
    21 
    43 
    65 
    87 

Если вы хотите, чтобы напечатать его в качестве символов, использовать его без str2num, как это -

num2str(fliplr(reshape(A,2,[])'),'%1d') 

Выход -

ans = 
21 
43 
65 
87 

Общий случай с нулями дополнения -

A=[1 2 3 4 5 6 7 8 9 3] %// Input array 
N = 3; %// groupings, i.e. 2 for pairs and so on 
A = [A zeros(1,N-mod(numel(A),N))]; %// pad with zeros 
out = str2num(num2str(fliplr(reshape(A,N,[])'),'%1d')) 

Выход -

out = 
    321 
    654 
    987 
    3 

Edit для шестнадцатеричных чисел:

Ar = A(flipud(reshape(1:numel(A),2,[]))) 
out1 = reshape(cellstr(dec2hex(Ar))',2,[])' 
out2 = [char(out1(:,1)) repmat(' ',[numel(A)/2 1]) char(out1(:,2))] 

Выход -

out1 = 
    'FF' '01' 
    '7A' '03' 
    '6B' '55' 
out2 = 
FF 01 
7A 03 
6B 55 
+0

Спасибо .. может ли это быть расширено, чтобы работать, если длина массива нечетна. добавив нуль, чтобы сделать это даже –

+1

@crazy_bean Попробуйте это перед использованием этого кода - 'A = [Нули (1, mod (numel (A), 2))]'? Кроме того, может быть два или три или более числа цифр в 'A'? Если это так, это может усложнить ситуацию. – Divakar

+0

Да массив содержит только 2 цифры цифр –

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