2009-12-19 50 views
0

在以下代碼:的ActionScript3符號擴展與索引訪問的ByteArray

var bytes:ByteArray = new ByteArray(); 

var i:int = -1; 
var j:int; 

bytes[0] = i; // bytes[0] = -1 == 0xff 
j = bytes[0]; // j == 255; 

的詮釋J結束了具有值255,而不是-1。我似乎無法找到一個文檔,定義如何索引訪問ByteArray應該是符號擴展 - 我可以可靠地承擔這種行爲,還是應該採取措施將這些值截斷爲8位數量?我從Java移植了一堆代碼,寧願使用索引訪問,而使用readByte()等方法。

回答

0

IDataInput接口(由ByteArray的實現)說:當你讀數據

符號擴展唯一重要的,而不是當你寫它。因此,您不需要單獨的寫入方法來處理IDataInput.readUnsignedByte()和IDataInput.readUnsignedShort()。

這同樣適用於[]數組訪問,所以在寫入之前不需要截斷。

我看不到任何明確的文檔,沒有說明數組讀取訪問是無符號的。如果你想確保讀訪問給你一個無符號值回你可能會說:

j= j<<24>>>24; 

,並用同樣的>>簽署。但是,由於ActionScript是單一實現,而不是通用標準,因此您可能不必擔心它。

+0

感謝您的迴應。很高興得到一些確認,這(使用[]運算符讀入int)確實是「未定義的」。解決方案並不是一個大問題,也許未來的更新將闡明文檔中的行爲。 – 2009-12-23 03:36:28