将Little-endian ByteArray转换为AS3中的Big-endian

时间:2011-06-11 10:40:05

标签: actionscript-3 bytearray endianness alchemy

如何在AS3中将Little-endian ByteArray转换为Big-endian? 我将bitmapData转换为Big-endian ByteArray,然后使用Adobe Alchemy将其推送到内存中。然后当我从记忆中读到它时,我得到Little-endian ByteArray。如何获得Big-endian。

我使用此示例代码http://blog.debit.nl/2009/03/using-bytearrays-in-actionscript-and-alchemy/(C中的内存分配,在Actionscript中直接访问(FAST !!))

代码:

var ba:ByteArray = currentBitmapData.getPixels( currentBitmapData.rect );
ba.position = 0;

var ns:Namespace = new Namespace("cmodule.al_exam");
var data:ByteArray = (ns::gstate).ds; //point to memory

_dataPosition = lib.initByteArray(ba.length); //This is the position of the data in memory          
lib.writeData(ba); //example function to write data in C
data.position = _dataPosition; //reset position

// get noise, not image
bmd.setPixels(currentBitmapData.rect,data);
myBitmap.bitmapData = bmd;

1 个答案:

答案 0 :(得分:4)

前段时间我在Adobe Forums上询问了这个问题。

Flash VM本身是Little Endian,Alchemy中运行的代码也是如此。由于不清楚的原因,许多Flash API将字节返回Big Endian。多奇怪。 (也许这是Macromedia时代遗留的API事件。谁知道呢?)

设置ByteArray.endian会更改存储在ByteArray中的字节。它会影响readXXX / writeXXX的工作方式(也就是说,它们会在读/写时翻转字节)。

但是,由于您的Alchemy代码直接查看字节(即不使用ByteArray方法),因此必须手动处理翻转。请注意,传入的字节和传出的字节都是如此。

有关翻转字节顺序的更多信息是here