我在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);
// ??
答案 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 )
}