java - ActionScript 3 中的按位运算与 Java 的比较

标签 java actionscript-3 actionscript

我正在研究编写 BitString 的 AS3 代码进入 ByteArray .来源:JPGEncoder#writeBits()

private var byteout:ByteArray;
private var bytenew:int = 0;
private var bytepos:int = 7;

private function writeBits(bs:BitString):void
{
    var value:int = bs.val;
    var posval:int = bs.len-1;
    while (posval >= 0) {
        if (value & uint(1 << posval)) {
            bytenew |= uint(1 << bytepos);
        }
        posval--;
        bytepos--;
        if (bytepos < 0) {
            if (bytenew == 0xFF) {
                writeByte(0xFF);
                writeByte(0);
            } else {
                writeByte(bytenew);
            }
            bytepos=7;
            bytenew=0;
        }
    }
}

但我不明白部分代码。

  • 什么是 uint(1 << bytepos)
  • if 条件是什么 if (value & uint(1 << posval))
    • 我不知道 &是“与”位运算符,或“与”条件。
    • 是否if(number)在 AS3 中表示 if(number != 0)

Java 中的这些 AS3 代码是什么?

最佳答案

Java 中的位运算有点笨拙,因为 Java 没有无符号类型。 因此,当您打算使用字节时,您应该确保使用字节。 0x0f之类的东西 | 0x80 -> 0b1000 1111 完成字节必须始终转换为字节:

System.out.printf("%x - %x - (byte)%x - (int)%x\n", 
                   (byte)0x80, 
                   (byte)0xf, 
                   (byte)((byte)0x80|(byte)0xf), 
                    (int)((byte)0x80|(byte)0xf));

OUTPUT:
80 - f - (byte)8f - (int)ffffff8f

话虽如此,您可能希望从一开始就使用 int,然后再转换为 bytes。

您提供的代码将 BitString 转录为切成字节的比特流。

如果设置了字节的所有位,则处理特殊情况,在这种情况下输出 0xff00。

What is uint(1 << bytepos)?

这会将运算符的 lhs 向左移动 bytepos 位:

1 << 4 -> 0b00010000

What is the if condition if (value & uint(1 << posval))? I don't know whether the & is "and" bit operator, or "and" condition.

& 是按位与,&& 是 boolean 值。

如果 posval 位置的位被设置,操作是 != 0 -> TRUE。这是设置字节中相应位的条件。

将代码转移到 Java 实际上应该很简单。我建议您在 java 中使用纯 int 并在您编写之前转换为字节:

byte realByte = (byte)(intbyte & (byte)0xff);
writeByte(realByte);

这样,您就可以避免不断地转换为 byte,也可以避免上面提到的负字节问题。

关于java - ActionScript 3 中的按位运算与 Java 的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56732832/

相关文章:

actionscript-3 - Wowza的流播放在Flash Player上发出声音audio啪声

actionscript - 是否可以从 swf 发送 ICMP 回显请求?

flash - actionscript3参数错误: Error #2015: Invalid BitmapData

java - 无法连接到 MySQL 服务器 - Java

java - 使用 JSF/PrettyFaces 获取当前页面名称

java - 如何制作 ImageView 数组并在 for 循环中将它们设置为 enabled(false)

actionscript-3 - 在 ActionScript 中,虚拟关键字有什么作用?

actionscript-3 - 尝试从 AS3 中的鼠标事件返回目标名称

actionscript-3 - AS3 从外部 SWF 实例化类

java - Spring security中使用rest服务进行身份验证和授权