operación en modo bit en ActionScript 3 comparar a Java

nhoxbypass:

Estoy investigando el código AS3 que escribir BitStringen una ByteArray. Fuente: 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;
        }
    }
}

Pero no entiendo parte del código.

  • ¿Qué es uint(1 << bytepos)?
  • ¿Cuál es la condición if if (value & uint(1 << posval))?
    • No sé si el &es "y" operador de bits, o "y" condición.
    • Lo hace if(number)en el medio de AS3 if(number != 0)?

¿Cuál es el código AS3 éstos equivalente en Java?

thst:

operaciones bit a bit en Java son un tanto incómoda, porque Java no tiene los tipos sin signo. Así que cuando usted tiene la intención de trabajar con bytes, debe asegurarse de que permanezca con bytes. Cosas como 0x0f | 0x80 -> 1111 0b1000 hecho con bytes se tiene que convertir bytes todo el tiempo:

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

Habiendo dicho esto, es posible que desee trabajar con enteros desde el principio y fundido a bytes más tarde.

El código que transcribe la cadena de bits presentes en un corte de flujo de bits en bytes.

Un caso especial es manejado si se establecen todos los bits de un byte, en ese caso es 0xff00 salida.

Lo que es uint (1 << bytepos)?

Esto mueve el LHS del operador de byteposbits a la izquierda:

1 << 4 -> 0b00010000

¿Cuál es la condición if si (valor y uint (1 << posval))? No sé si el y es "y" operador de bits, o "y" condición.

&es AND bit a bit, &&es booleano.

La operación es != 0-> TRUEsi el bit en posvalla posición se establece. Esta es la condición para establecer el bit correspondiente en el byte.

Transferir el código de Java debe ser sencillo en realidad. Yo sugeriría que utilice llanura inten Java y convertido al byte justo antes de escribir:

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

De esta manera, se evita la fundición constante de bytes y se evita el problema mencionado anteriormente con bytes negativos.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=227635&siteId=1
Recomendado
Clasificación