Pregunta

Necesito imprimir una variable de tipo byte en un formato sin firmar. ¿Cómo puedo hacer eso?

¿Fue útil?

Solución

¿Estás diciendo que estás comenzando con un INT firmado y quieres el valor absoluto? Podrías hacer algo como esto:

    byte b = Byte.parseByte("-9");
    int i = (int) b;

    System.out.println(Math.abs(i));

Otros consejos

Acabo de escribir ese método para ti.

public static String printUnsignedByte(byte b){
    StringBuilder sb = new StringBuilder();
    while(b>0){
        sb.insert(0, b%2==0?0:1);
        b>>=1;
    }
    for(int i = 8-sb.length(); i>0; i--){
        sb.insert(0,0);
    }
    return sb.toString();
}

Editar: pero no cubre el formato del complemento de los 2. ¿Necesitas eso también? Edit2: Echa un vistazo:

Integer.toBinaryString(2)

Cubre el cumplido de 2E por valores negativos, pero la salida es demasiado larga, pribe 4 bits. Solo acorta esto con la subcadena y terminaste.

Editar 3: Mi solución final.

public static String printUnsignedByte(byte b){
    if(b>0){
        StringBuilder ret = new StringBuilder(Integer.toBinaryString(b));
        for(int i = 8-ret.length(); i>0; i--){
            ret.insert(0,0);
        }
        return ret.toString();
    }else{
        return Integer.toBinaryString(b).substring(24);
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top