我在 MATLAB 工作区中有一个小端格式的二进制数列表,我想将它们转换为 int32。 a
是一个由 0 和 1 组成的双向量,如下所示:
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 位整数。
最佳答案
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
是 N×32 矩阵,您只需将 sum(...)
替换为链接解决方案中的矢量化计算即可:
b = typecast(uint32(a*(2.^(0:size(a, 2)-1)).'), 'int32');
关于matlab - 如何将二进制值列表转换为int32类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52593070/