2011-06-11 108 views
0

如何在AS3中将Little-endian ByteArray转换为Big-endian? 我将bitmapData转换为Big-endian ByteArray,然后用Adobe Alchemy将它推入内存。然后当我从内存中读取它时,我会得到Little-endian ByteArray。如何获得Big-endian。在AS3中将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; 

回答

4

前阵子我问这对Adobe Forums

Flash VM本身就是Little Endian,就像在Alchemy中运行的代码一样。由于不清楚的原因,许多Flash API以Big Endian的形式返回字节。多么奇怪。 (也许这是一个旧的API的事情从Macromedia天。谁知道?)

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

但是,由于您的Alchemy代码直接查看字节(即不使用ByteArray方法),因此必须手动处理翻动。请注意,对于传入字节以及传出字节而言,这是正确的。

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