首页 > 解决方案 > 在Matlab中提取嵌入在32位二进制数中的多个数字的最快方法是什么

问题描述

我有一个 32 位数字(uint32),其中包含以下方式的四个数字:

以下代码有效,但我想让它更快

Var1=bitshift(fourbytes,-30);
Var2_temp=bitshift(fourbytes,-21);
Var2=bitand(Var2_temp,511);
Var3_temp=bitshift(fourbytes,-12);
Var3=bitand(Var2_temp,511);
Var4=bitand(fourbytes,2^12-1));

例子:

fourbytes = 2149007896;

结果是

Var1=2;
Var2=0;
Var3=372
Var4=536

我试过类似的东西

Var1=bin2dec(num2str(bitget(fourbytes,32:-1:31)));

但这和 bi2de 一样慢得令人难以置信

bi2de(bitget(onebyte(1),32:-1:31),'left-msb');

是我用 C 编写这部分的唯一选择,还是有更好的方法我错过了?

标签: matlabbinary-data

解决方案


这可以通过

  • 然后除以floor去除不需要的最右边的位,然后
  • mod摆脱不需要的最左边的位。

我没有计时,但它可能比你目前的方法更快。

fourbytes = 2149007896;
var1 = floor(fourbytes/2^30);
var2 = mod(floor(fourbytes/2^21), 2^9);
var3 = mod(floor(fourbytes/2^12), 2^9);
var4 = mod(fourbytes, 2^12);

推荐阅读