2012-03-07 45 views
46

Estoy tratando de averiguar por qué String.format() se comporta de la manera en que lo hace.String.format() y números hexadecimales en Java

Contexto: clase de programación de sistemas, escribir un ensamblador.

Hay un campo hexadecimal de 5 caracteres en el archivo de objeto, que estoy creando a partir de un valor.

intentado usar: String.format("%05X", decInt);

Esto funciona como está previsto para los números positivos (11 ->0000B) Sin embargo se produce un error para los números negativos (-1 ->FFFFFFFF en lugar de FFFFF)

supongo Podría tomar una subcadena de los últimos 5 caracteres, pero aún me gustaría descubrir por qué se comporta de esta manera.

+5

El problema es el 'ancho' establecido por el método de formato, en este caso 5, es el ancho mínimo. – twain249

Respuesta

66

El ancho utilizado en el formato es siempre un ancho mínimo. En este caso, en lugar de utilizar las operaciones de cadenas secundarias que sugeriría:

String.format("%05X", decInt & 0xFFFFF); 
11

ancho formato sólo funciona para crear un número mínimo de dígitos, y sólo tiene efecto sobre los ceros iniciales.

En lugar de subcadena, se puede usar una máscara de bits:

String.format("%05X", decInt & 0x0FFFFF) 

Por cierto, 11 ->0000B, no 0000A de acuerdo con su pregunta.

+1

Ok, eso tiene sentido ahora. También regresó y modificó A-> B, ¡salud! – Fitzoh

Cuestiones relacionadas