从bytearray读取3位

时间:2012-08-06 02:48:46

标签: actionscript-3

我在ActionScript 3中编写了一个DXT5图像阅读器,我需要在一个更大的bytearray中读取存储在6个字节中的16个3位值。关于如何高效地阅读本文,我有点不知所措。我用2位代码做了类似的事情,但奇数使得它更难(至少对我而言)。理想情况下,源字节数将以有问题的6之后的下一个字节的位置结束。

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

// ??

1 个答案:

答案 0 :(得分:0)

好的,所以我想出了一个解决方案 - 不是很优雅,但它有效。基本上我将24位读入一个短的和一个字节,然后将它们组合成一个uint,然后表示24位。然后我使用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 )
}