如何在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;
答案 0 :(得分:4)
前段时间我在Adobe Forums上询问了这个问题。
Flash VM本身是Little Endian,Alchemy中运行的代码也是如此。由于不清楚的原因,许多Flash API将字节返回Big Endian。多奇怪。 (也许这是Macromedia时代遗留的API事件。谁知道呢?)
设置ByteArray.endian会不更改存储在ByteArray中的字节。它会影响readXXX / writeXXX的工作方式(也就是说,它们会在读/写时翻转字节)。
但是,由于您的Alchemy代码直接查看字节(即不使用ByteArray方法),因此必须手动处理翻转。请注意,传入的字节和传出的字节都是如此。
有关翻转字节顺序的更多信息是here。