在 Matlab 中提取嵌入 32 位二进制数的多个数字的最快方法是什么
What is the fastest method to extract multiple numbers embedded in a 32 bit binary number in Matlab
我有一个 32 位数字 (uint32),其中包含以下方式的四个数字:
- Var1 以位为单位 32:31
- Var2 以位为单位 30:22
- Var3 以位为单位 21:13
- Var4 以位为单位 12:1
以下代码有效,但我想让它更快
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 语言编写这部分的唯一选择吗,还是我缺少更好的方法?
我有一个 32 位数字 (uint32),其中包含以下方式的四个数字:
- Var1 以位为单位 32:31
- Var2 以位为单位 30:22
- Var3 以位为单位 21:13
- Var4 以位为单位 12:1
以下代码有效,但我想让它更快
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 语言编写这部分的唯一选择吗,还是我缺少更好的方法?