如何将小终端ByteArray转换成AS3中的大端?我将bitmapData转换为大端ByteArray,然后使用Alchemy将其放入内存中.然后当我从记忆中读到它的时候,我得到了ByteArray。如何得到大结局。
我使用这个示例代码http://blog.debit.nl/2009/03/using-bytearrays-in-actionscript-and-alchemy/ (在Actionscript中直接访问C中的内存分配(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;发布于 2011-06-11 20:36:54
不久前,我在Adobe论坛上问过这个问题。
Flash本身是Little Endian,在Alchemy中运行的代码也是如此。由于不清楚的原因,许多Flash将字节作为大端返回。多奇怪啊。(也许这是从Macromedia时代遗留下来的API。谁知道?)
设置ByteArray.endian不会更改存储在ByteArray中的字节。它会影响readXXX/writeXXX的工作方式(也就是说,它们在读取/写入字节时会翻转字节)。
但是,由于炼金术代码直接查看字节(即不使用ByteArray方法),因此必须手动处理翻转。请注意,对于传入字节和传出字节也是如此。
关于翻转字节顺序的更多信息是这里。
https://stackoverflow.com/questions/6315417
复制相似问题