【发布时间】:2014-05-07 01:28:37
【问题描述】:
我需要以 C 语言中最快的方式将 112 位(16 字节)的 7 位值变量(它们以字节接收但 MSb 必须丢弃)转换为 14 字节。
所以基本上,我需要做的是把接收到的第一个字节的前 7 位移到左边,然后把第二个字节的第 7 位放在第一个字节中存储在位位置 0 所以我会在第一个字节中获得接收到的第一个字节的 7 位加上第二个字节的第 7 位。然后我将不得不对其余部分做同样的事情。
我能想到的第一个方法是:
byteToStore [0] = 1 << byteReceived[0] + byteReceived[1] & 1;
byteToStore [1] = 2 << byteReceived[1] + byteReceived[2] & 3;
byteToStore [2] = 3 << byteReceived[2] + byteReceived[3] & 7;
等等。
此外,如果可以使用 for 循环轻松制作,那就太好了。我可以用我的方法使用 for 循环,但它不会那么“干净”。
谢谢。
【问题讨论】:
-
我认为您混淆了移位操作数:移位操作数在左侧,移位宽度在右侧。此外,您最终可能会得到一个左移和右移,而不是一个移位和一个按位与。