我在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位整数。
答案 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');