MATLAB将值向量转换为uint32

dev*_*vin 3 matlab bit-manipulation vector data-conversion unsigned-integer

我有一个包含值0,1,2和3的向量.我想要做的是从每个从这个向量中提取的16个元素集合中取下两位,并将它们全部附加在一起得到一个uint32.有人知道一个简单的方法吗?

后续:如果向量中的元素数不是16的整数倍,该怎么办?

Jac*_*cob 6

这是一个矢量化版本:

v = floor(rand(64,1)*4);
nWord = size(v,1)/16;
sum(reshape([bitget(v,2) bitget(v,1)]',[32 nWord]).*repmat(2.^(31:(-1):0)',[1 nWord ]))
Run Code Online (Sandbox Code Playgroud)

  • 矢量化非常聪明,我不会想到这一点.你可以(稍微)通过使用sum(reshape(v,[16 nWord])来优化它.*repmat(2.^(30:( - 2):0)',[1 nWord])); 这避免了bitget. (5认同)