从字节数组读取3位

问题描述:

我在ActionScript 3中编写了一个DXT5图像读取器,我需要读取存储在较大字节数组中的6个字节中的16位3位值。对于如何高效地阅读这些内容,我有点不知所措。我用2位代码做了类似的事情,但奇数会让事情变得更加困难(至少对我来说)。理想情况下,源字节数组将以6之后的下一个字节的位置结束。从字节数组读取3位

var values:Vector.<uint> = new Vector.<uint>(16); 
var alpha_bytes:ByteArray = new ByteArray(); 
data.readBytes(alpha_bytes, 0, 6); 

// ?? 

好的,所以我想出了一个解决方案 - 不是很优雅,但它的工作原理。基本上我将24位读入一个短字节和一个字节,然后将它们组合成一个代表24位的uint。然后我使用for循环来提取真实值。

var alpha_16:uint = data.readUnsignedShort(); 
var alpha_8:uint = data.readUnsignedByte(); 

var alpha_1:uint = (alpha_8 << 16) | alpha_16; 

for(j = 0; j < 8; j++){ 
    alpha_values[j] = (alpha_1 & (7 << (3 * j))) >> (3 * j) 
}