Преобразовать байтовый массив с прямым порядком байтов в Big3 с прямым порядком байтов в AS3 - PullRequest
0 голосов
/ 11 июня 2011

Как преобразовать байтовый массив Little-endian в Big-endian в AS3?Я конвертирую bitmapData в байтовый массив с прямым порядком байтов и затем помещаю его в память с помощью Adobe Alchemy.И затем, когда я читаю это из памяти, я получаю байтовый массив Little-endian.Как получить 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;

1 Ответ

4 голосов
/ 12 июня 2011

Некоторое время назад я спросил об этом на форумах Adobe .

Сама флеш-виртуальная машина Little Endian, как и код, работающий в Alchemy.По непонятным причинам многие Flash API возвращают байты как Big Endian.Как странно.(Возможно, это устаревшая функция API из Macromedia дней. Кто знает?)

Установка ByteArray.endian действительно не изменяет байты, хранящиеся в ByteArray.Это влияет на работу readXXX / writeXXX (то есть они будут переворачивать байты при чтении / записи).

Однако, поскольку ваш код Алхимии смотрит на байты напрямую (т.е. не использует методы ByteArray), он должен обрабатывать переворачивание вручную.Обратите внимание, что это верно как для входящих байтов, так и для исходящих байтов.

Дополнительная информация о порядке следования байтов здесь .

...