ASCII строка в двоичный вектор в MATLAB? - PullRequest
4 голосов
/ 07 августа 2011

Как мне преобразовать строку в MATLAB в двоичный вектор ASCII-представления этой строки?

Например, я хочу преобразовать

string = 'Mary had a little lamb';

в вектор, похожий на:

[0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 1, etc.]
\-------v------/ \-------v------/
        M                a         

Ответы [ 2 ]

5 голосов
/ 07 августа 2011

Хотите, чтобы записи массива были числами, а не символами? Если да, то это должно сработать:

s = 'Mary had a little lamb';
a = dec2bin(s,8)';
a = a(:)'-'0'

Пример вывода, показывающий, что это делает:

>> s = 'Ma';          
>> a = dec2bin(s,8)'; 
>> class(a)
ans =
char
>> a = a(:)'-'0'      
a =
  Columns 1 through 13
     0     1     0     0     1     1     0     1     0     1     1     0     0
  Columns 14 through 16
     0     0     1
>> class(a)
ans =
double
2 голосов
/ 07 августа 2011

Это довольно просто, но вы должны знать, что MATLAB внутренне хранит строку в ASCII и может вычислять с соответствующими числовыми значениями.

Итак, сначала мы преобразуем каждый символ (число) в двоичное расширение (длины 8) и, наконец, мы объединяем все эти ячейки вместе для достижения желаемого результата.

x = arrayfun(@(x)(dec2bin(x,8)), string, 'UniformOutput', false)
x = [x{:}]

edit: Как упоминает Оли Чарльзуорт ниже, то же самое можно сделать с помощью следующего кода:

reshape(dec2bin(str, 8)', 1, [])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...