如何将二进制值列表转换为int32类型?

时间:2018-10-01 14:14:27

标签: matlab binary type-conversion int32

我在MATLAB工作区中有一个以Little-Endian格式表示的二进制数列表,我想将它们转换为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 :(得分:5)

solutions from this related question(特定于无符号整数)可以进行修改以处理有符号整数。最简单的方法是将输出从那里转换为uint32,然后使用int32转换为typecast。建立在this solution上:

>> 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

如果您知道用于位模式的specific representation(我的猜测是two's complement),则可以通过考虑符号位和complement来避免使用typecast直接在计算中。

如果a是一个32乘N的矩阵,则可以简单地将sum(...)替换为链接解决方案中的矢量化计算:

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