Einverstanden, dass dieser viel besser ist als jeder der anderen. Es funktioniert perfekt. Das einzige, was ich vorschlagen würde, ist eine etwas genauere Beschreibung der an die Methode übergebenen Parameter. Ich musste nachschlagen, ob ich den Wert als Ganzzahl oder als Hex-Zeichenfolge übergeben habe.
Beachten Sie jedoch, dass Sie dadurch möglicherweise mehr als 2 Ziffern erhalten! (Eine Ganzzahl besteht aus 4 Bytes, sodass Sie möglicherweise 8 Zeichen zurückerhalten können.)
Hier ist ein kleiner Hack, um Ihre Auffüllung zu erhalten, solange Sie absolut sicher sind, dass Sie nur mit Einzelbyte-Werten (255 oder weniger) arbeiten:
Sie können dieselbe Technik für größere Werte verwenden. Wenn Sie bis zu 2-Byte-Werte auffüllen möchten, können Sie Integer.toHexString (0x10000 | value) .substring (1) ausführen. Für N hexadezimale Ziffern fügen Sie N 0s nach der "1" hinzu. Natürlich darf Ihr Hex-Wert nicht mehr als N Ziffern haben.
Kann jemand erklären, warum dies ein bisschen weise und mit 0xFF ist? Aus diesem Grund sollten Antworten auf SO nicht nur der Code sein
Stealth Rabbi
4
Der OxFF & (Byte) -Wert konvertiert nur das vorzeichenbehaftete Byte in ein vorzeichenloses. (int) -1 = 0xFFFFFFFF, (int) (- 1 & 0xFf) = 0xFF
Aristar
In diesem Fall ist das bitweise und mit 0xFF aufgrund des "% 02X" -Formats nicht erforderlich.
Freek de Bruijn
1
Der% 02X-Bezeichner gibt mindestens zwei Ziffern an. Wenn Sie genau zwei Ziffern möchten (höhere Bits verwerfen), benötigen Sie das bitweise und.
Plugwash
Gut zu wissen, danke für diese zusätzlichen Informationen!
Tryp
14
Verwenden Sie Integer.toHexString(). Vergessen Sie nicht, mit einer führenden Null aufzufüllen, wenn Sie nur eine Ziffer haben. Wenn Ihre Ganzzahl größer als 255 ist, erhalten Sie mehr als 2 Ziffern.
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();
Ich benutze dies, um eine Zeichenfolge zu erhalten, die den äquivalenten Hex-Wert einer durch Leerzeichen getrennten Ganzzahl für jedes Byte EX darstellt: Hex-Wert
von 260 in 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));
}
Antworten:
String.format("%02X", value);
Wenn Sie
X
anstelle vonx
wie von Aristar vorgeschlagen verwenden , müssen Sie nicht verwenden.toUpperCase()
.quelle
Integer.toHexString(42);
Javadoc: http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#toHexString(int)
Beachten Sie jedoch, dass Sie dadurch möglicherweise mehr als 2 Ziffern erhalten! (Eine Ganzzahl besteht aus 4 Bytes, sodass Sie möglicherweise 8 Zeichen zurückerhalten können.)
Hier ist ein kleiner Hack, um Ihre Auffüllung zu erhalten, solange Sie absolut sicher sind, dass Sie nur mit Einzelbyte-Werten (255 oder weniger) arbeiten:
Integer.toHexString(0x100 | 42).substring(1)
Viele weitere (und bessere) Lösungen bei Left Padding Integer (Nicht-Dezimal-Format) mit Nullen in Java .
quelle
String.format("%02X", (0xFF & value));
quelle
Verwenden Sie
Integer.toHexString()
. Vergessen Sie nicht, mit einer führenden Null aufzufüllen, wenn Sie nur eine Ziffer haben. Wenn Ihre Ganzzahl größer als 255 ist, erhalten Sie mehr als 2 Ziffern.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();
quelle
StringBuilder
tatsächlich eine Verbesserung? pastebin.com/KyS06JMzWenn Sie sie nur drucken müssen, versuchen Sie Folgendes:
for(int a = 0; a < 255; a++){ if( a % 16 == 0){ System.out.println(); } System.out.printf("%02x ", a); }
quelle
Ich benutze dies, um eine Zeichenfolge zu erhalten, die den äquivalenten Hex-Wert einer durch Leerzeichen getrennten Ganzzahl für jedes Byte EX darstellt: Hex-Wert von 260 in 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)); }
quelle
Laut GabrielOshiro versuchen Sie dies, wenn Sie eine Ganzzahl bis zur Länge 8 formatieren möchten
String.format("0x%08X", 20) //print 0x00000014
quelle