【问题标题】:ActionScript3 sign-extension with indexed access to ByteArray具有对 ByteArray 的索引访问的 ActionScript3 符号扩展
【发布时间】:2023-04-08 16:27:01
【问题描述】:

在以下代码中:

var bytes:ByteArray = new ByteArray();

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

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

int j 最终的值为 255,而不是 -1。我似乎找不到定义对 ByteArray 的索引访问应该如何进行符号扩展的文档 - 我可以可靠地假设这种行为,还是应该采取措施将这些值截断为 8 位数量?我正在从 Java 移植一堆代码,并且更喜欢使用索引访问而不是 readByte() 等方法。

【问题讨论】:

    标签: actionscript bytearray


    【解决方案1】:

    IDataInput 接口(由 ByteArray 实现)表示:

    符号扩展仅在您读取数据时才重要,而不是在您写入数据时。因此,您不需要单独的写入方法来处理 IDataInput.readUnsignedByte() 和 IDataInput.readUnsignedShort()。

    这同样适用于[] 数组访问,因此您无需在写入前截断。

    我看不到任何明确的文档,也没有任何内容表明数组读取访问是无符号的。如果您想确保读取访问权返回无符号值,您可以说:

    j= j<<24>>>24;
    

    同样使用&gt;&gt; 进行签名。但是,由于 ActionScript 是单一实现,而不是通用标准,您可能不必担心

    【讨论】:

    • 感谢您的回复。很高兴得到一些确认,这(使用 [] 运算符读取到 int 中)确实是“未定义的”。解决办法不是什么大问题,也许未来的更新会澄清文档中的行为。
    猜你喜欢
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    相关资源
    最近更新 更多