AS3中如何将Little-endian ByteArray转换为Big-endian?
我将 bitmapData 转换为 Big-endian ByteArray,然后使用 Adobe Alchemy 将其推入内存。然后当我从内存中读取它时,我得到了 Little-endian ByteArray。如何获得大端字节序。
我使用这个示例代码http://blog.debit.nl/2009/03/using-bytearrays-in-actionscript-and-alchemy/ http://blog.debit.nl/2009/03/using-bytearrays-in-actionscript-and-alchemy/(C 中的内存分配,可在 Actionscript 中直接访问(快!!))
Code:
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 论坛 http://forums.adobe.com/message/2894943.
Flash VM 本身是 Little Endian,在 Alchemy 中运行的代码也是如此。由于尚不清楚的原因,许多 Flash API 以 Big Endian 形式返回字节。多么奇怪啊。 (也许这是 Macromedia 时代遗留下来的 API。谁知道呢?)
设置 ByteArray.endian 确实not更改 ByteArray 中存储的字节。它会影响 readXXX/writeXXX 的工作方式(即,它们在读/写时会翻转字节)。
但是,由于您的 Alchemy 代码直接查看字节(即不使用 ByteArray 方法),因此它必须手动处理翻转。请注意,这对于传入字节和传出字节都是如此。
有关翻转字节顺序的更多信息是here http://www.codeproject.com/KB/cpp/endianness.aspx.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)