2011-06-11 110 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