2009-12-19 49 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