0

如何在 AS3 中将 Little-endian ByteArray 转换为 Big-endian?我将 bitmapData 转换为 Big-endian ByteArray,然后使用 Adob​​e Alchemy 将其推送到内存中。然后当我从内存中读取它时,我得到了 Little-endian ByteArray。如何获得大端。

我使用此示例代码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

1 回答 1

4

不久前,我在Adob​​e 论坛上询问了这个问题。

Flash VM 本身是 Little Endian,在 Alchemy 中运行的代码也是如此。由于尚不清楚的原因,许多 Flash API 将字节返回为 Big Endian。多么奇怪。(也许这是 Macromedia 时代遗留下来的 API。谁知道呢?)

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

但是,由于您的 Alchemy 代码直接查看字节(即,不使用 ByteArray 方法),它必须手动处理翻转。请注意,传入字节和传出字节都是如此。

有关翻转字节顺序的更多信息在这里

于 2011-06-11T20:36:54.430 回答