operação bit a bit em ActionScript 3 comparar com Java

nhoxbypass:

Estou pesquisando este código AS3 que escrever uma BitStringem uma ByteArray. Fonte: 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;
        }
    }
}

Mas eu não entendo parte do código.

  • O que é uint(1 << bytepos)?
  • Qual é a condição if if (value & uint(1 << posval))?
    • Eu não sei se o &é "e" operador bit, ou "e" condição.
    • Será que if(number)no meio AS3 if(number != 0)?

O que é isso código AS3 equivalente em Java?

thst:

operações bit a bit em Java são um pouco estranho, porque Java não possui nenhum tipo não assinados. Então, quando você pretende trabalhar com bytes, você deve se certificar de que você ficar com bytes. Coisas como 0x0f | 0x80 -> 0b1000 1111 feito com bytes deve ser convertido para bytes o tempo todo:

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

Dito isto, você pode querer trabalhar com ints desde o início e lançou para bytes mais tarde.

O código que você presentes transcreve a bitstring em um corte de fluxo de bits em bytes.

Um caso especial é tratado se todos os bits de um byte são definidas, em que 0xff00 caso é de saída.

O que é uint (1 << bytepos)?

Isso move a LHS do operador de byteposbits para a esquerda:

1 << 4 -> 0b00010000

Qual é a condição if if (value & uint (1 << posval))? Eu não sei se o & é "e" operador bit, ou "e" condição.

&é bit a bit E, &&é boolean.

A operação é != 0-> TRUEse o bit na posvalposição está definido. Esta é a condição para definir o bit correspondente no byte.

Transferir o código para Java deve ser simples na verdade. Sugiro que você use plain intem java e converter para byte apenas antes de escrever:

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

Desta forma, você evita vazamento constante para byte e você evitar o acima mencionado problema com bytes negativos.

Acho que você gosta

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