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

标签 matlab binary type-conversion int32

我在 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/

相关文章:

matlab - 在 matlab 中评论

c# - 反序列化错误: End of Stream encountered before parsing was completed

java - 在字符串变量中携带一个小图像文件?

c# - float 到字符串的转换

python - 在 python 中加速 int 列表到二进制的转换

matlab - 在 MATLAB 中获取排列的映射

matlab - 将两个 n 维元胞数组合并为一个 n × n 维元胞数组

java - 如何翻转 Java 原始字节中的特定位?

c - iphone:如果 float 为负数,则转换为无符号整数的 float 将设置为 0?

matlab - 64 位除法不正确