Преобразовать логическое в строку - PullRequest
1 голос
/ 05 марта 2012

Мне нужно преобразовать логический вектор в строку .. чтобы я мог взять каждые 8 ​​бит логических векторов и преобразовать их в эквивалентное ему значение символа.

A=0 1 1 1 0 1 1 0 1 1 0 0 0 0 1 ;
A is of type logical 

мне нужно преобразовать его в строку, чтобы A было равно 'va'

Ответы [ 2 ]

2 голосов
/ 05 марта 2012

Вы можете использовать char для преобразования числа в символ.

Чтобы преобразовать каждые 8 ​​элементов A в число, есть несколько способов:

% using definition of binary
n = sum(A(1:8).*2.^[7:-1:0])
% using 'base2dec'
n = base2dec(sprintf('%i',A(1:8)),2)

Затем используйте char(n), чтобы вывести персонажа.

Чтобы применить это к каждым 8 элементам A, вы можете использовать цикл или что-то вроде arrayfun.

arrayfun( @(i) char(base2dec(sprintf('%i',A(i:(i+7))),2)),
          1:8:length(A) )

Примечание В A, который вы дали в исходном вопросе, есть только 15 элементов, поэтому вы не можете группировать каждые 8 ​​(нужно 16) - вам нужно написать некоторый код, чтобы разобраться с тем, что делай в этом случае.

Полезные документы:

0 голосов
/ 05 марта 2012

В дополнение к ответу @ математический.coffee вместо SPRINTF вы можете просто добавить 48 (что является кодом для символа '0') к A, чтобы получить строку:

Astr = char(A + 48);

или

Astr = char(A + int8('0'));

Вы также можете использовать BIN2DEC вместо BASE2DEC.

Так что вы можете использовать его в ARRAYFUN как

arrayfun( @(i) char(bin2dec(char(A(i:(i+7))+48))),1:7:length(A) )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...