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

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

要回复问题请先登录注册