De acuerdo, este es mucho mejor que cualquiera de los demás. Funciona perfectamente. Lo único que sugeriría es una descripción un poco más de los parámetros pasados al método. Tuve que buscar si pasaba el valor como un número entero o como una cadena hexadecimal.
Sin embargo, tenga en cuenta que esto puede proporcionarle más de 2 dígitos. (Un entero tiene 4 bytes, por lo que potencialmente podría recuperar 8 caracteres).
Aquí hay un truco para obtener su relleno, siempre que esté absolutamente seguro de que solo está tratando con valores de un solo byte (255 o menos):
Puede utilizar la misma técnica para valores más grandes. Si desea relleno para valores de hasta 2 bytes, puede hacer Integer.toHexString (0x10000 | value) .substring (1). Para N dígitos hexadecimales, agrega N 0 después del "1". Por supuesto, su valor hexadecimal no debe tener más de N dígitos.
¿Alguien puede explicar por qué esto funciona de forma bit a bit y con 0xFF? Es por eso que las respuestas en SO no deberían ser solo el código
Stealth Rabbi
4
El valor OxFF & (byte) simplemente convierte el byte firmado en sin firmar. (int) -1 = 0xFFFFFFFF, (int) (- 1 y 0xFf) = 0xFF
aristar
En este caso, el bit a bit y con 0xFF no es necesario debido al formato "% 02X".
Freek de Bruijn
1
El especificador% 02X especifica un mínimo de dos dígitos. Si desea exactamente dos dígitos (descartando bits más altos), entonces necesita el bit a bit y.
Plugwash
Es bueno saberlo, ¡gracias por esta información adicional!
tryp
14
Utilice Integer.toHexString(). No olvide rellenar con un cero a la izquierda si solo termina con un dígito. Si su número entero es mayor que 255 obtendrá más de 2 dígitos.
StringBuilder sb = new StringBuilder();
sb.append(Integer.toHexString(myInt));
if (sb.length() < 2) {
sb.insert(0, '0'); // pad with leading zero if needed
}
String hex = sb.toString();
uso esto para obtener una cadena que representa el valor hexadecimal equivalente de un número entero separado por espacio para cada byte
EX: valor hexadecimal de 260 en 4 bytes = 00 00 01 04
publicstatic String getHexValString(Integer val, int bytePercision){
StringBuilder sb = new StringBuilder();
sb.append(Integer.toHexString(val));
while(sb.length() < bytePercision*2){
sb.insert(0,'0');// pad with leading zero
}
int l = sb.length(); // total string length before spacesint r = l/2; //num of rquired iterationsfor (int i=1; i < r; i++){
int x = l-(2*i); //space postion
sb.insert(x, ' ');
}
return sb.toString().toUpperCase();
}
publicstaticvoidmain(String []args){
System.out.println("hex val of 260 in 4 bytes = " + getHexValString(260,4));
}
Respuestas:
String.format("%02X", value);
Si usa en
X
lugar dex
lo sugerido por aristar , entonces no necesita usar.toUpperCase()
.fuente
Integer.toHexString(42);
Javadoc: http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#toHexString(int)
Sin embargo, tenga en cuenta que esto puede proporcionarle más de 2 dígitos. (Un entero tiene 4 bytes, por lo que potencialmente podría recuperar 8 caracteres).
Aquí hay un truco para obtener su relleno, siempre que esté absolutamente seguro de que solo está tratando con valores de un solo byte (255 o menos):
Integer.toHexString(0x100 | 42).substring(1)
Muchas más (y mejores) soluciones en el relleno izquierdo de enteros (formato no decimal) con ceros en Java .
fuente
String.format("%02X", (0xFF & value));
fuente
Utilice
Integer.toHexString()
. No olvide rellenar con un cero a la izquierda si solo termina con un dígito. Si su número entero es mayor que 255 obtendrá más de 2 dígitos.StringBuilder sb = new StringBuilder(); sb.append(Integer.toHexString(myInt)); if (sb.length() < 2) { sb.insert(0, '0'); // pad with leading zero if needed } String hex = sb.toString();
fuente
StringBuilder
realmente una mejora? pastebin.com/KyS06JMzSi solo necesita imprimirlos, intente esto:
for(int a = 0; a < 255; a++){ if( a % 16 == 0){ System.out.println(); } System.out.printf("%02x ", a); }
fuente
uso esto para obtener una cadena que representa el valor hexadecimal equivalente de un número entero separado por espacio para cada byte EX: valor hexadecimal de 260 en 4 bytes = 00 00 01 04
public static String getHexValString(Integer val, int bytePercision){ StringBuilder sb = new StringBuilder(); sb.append(Integer.toHexString(val)); while(sb.length() < bytePercision*2){ sb.insert(0,'0');// pad with leading zero } int l = sb.length(); // total string length before spaces int r = l/2; //num of rquired iterations for (int i=1; i < r; i++){ int x = l-(2*i); //space postion sb.insert(x, ' '); } return sb.toString().toUpperCase(); } public static void main(String []args){ System.out.println("hex val of 260 in 4 bytes = " + getHexValString(260,4)); }
fuente
Según GabrielOshiro, si desea un formato entero de longitud 8, intente esto
String.format("0x%08X", 20) //print 0x00000014
fuente