Как преобразовать список двоичных значений в тип int32? - PullRequest
0 голосов
/ 01 октября 2018

У меня есть список двоичных чисел в формате с прямым порядком байтов в рабочем пространстве MATLAB, и я хочу преобразовать их в int32.a - это двойной вектор нулей и единиц, например:

a = [0 0 0 1 1 0 0 1   1 1 1 0 1 0 1 0   0 0 0 1 1 0 0 0   1 1 1 1 1 0 0 0];

int32(a) дает мне вектор строки из 32 двоичных значений без преобразования его в 32-разрядное целое число.

1 Ответ

0 голосов
/ 01 октября 2018

Решения из этого связанного вопроса (характерные для целых чисел без знака) могут быть изменены для обработки целого числа со знаком.Самый простой подход - преобразовать вывод оттуда в uint32, а затем преобразовать в int32, используя typecast.Опираясь на это решение :

>> a = [0 0 0 1 1 0 0 1 1 1 1 0 1 0 1 0 0 0 0 1 1 0 0 0 1 1 1 1 1 0 0 0];
>> b = typecast(uint32(sum(pow2(find(a)-1))), 'int32')

b =

  int32

   521688984

Если вы знаете конкретное представление , используемое для битовой комбинации (мое предположение будет дополнением до двух ), вы могли бы избежать использования typecast, учитывая знаковый бит и дополнять непосредственно в вычислениях.

Если a является матрицей N-32, вы можете простозамените sum(...) на векторизованные вычисления из связанного решения:

b = typecast(uint32(a*(2.^(0:size(a, 2)-1)).'), 'int32');
...