Согласен, этот намного лучше, чем любой другой. Работает отлично. Единственное, что я бы посоветовал, - это еще немного описать параметры, передаваемые методу. Мне приходилось искать, передавал ли я значение как целое число или как шестнадцатеричную строку.
Вы можете использовать ту же технику для больших значений. Если вы хотите заполнить до 2-байтовых значений, вы можете использовать Integer.toHexString (0x10000 | value) .substring (1). Для N шестнадцатеричных цифр вы добавляете N 0 после «1». Конечно, ваше шестнадцатеричное значение должно состоять не более чем из N цифр.
Может кто-нибудь объяснить, почему это делается побитно и с 0xFF? Вот почему ответы на SO не должны быть просто кодом
Stealth Rabbi
4
Значение OxFF & (byte) просто преобразует знаковый байт в беззнаковый. (int) -1 = 0xFFFFFFFF, (int) (- 1 & 0xFf) = 0xFF
aristar
В этом случае побитовое и с 0xFF не требуется из-за формата "% 02X".
Freek de Bruijn
1
Спецификатор% 02X указывает минимум две цифры. Если вы хотите ровно две цифры (отбрасывая старшие биты), вам нужно побитовое и.
plugwash
Полезно знать, спасибо за дополнительную информацию!
tryp
14
Используйте Integer.toHexString(). Не забудьте заполнить начальным нулем, если в итоге вы получите только одну цифру. Если ваше целое число больше 255, вы получите более двух цифр.
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();
Я использую это, чтобы получить строку, представляющую эквивалентное шестнадцатеричное значение целого числа, разделенного пробелом для каждого байта
EX: шестнадцатеричное значение 260 в 4 байтах = 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));
}
Ответы:
String.format("%02X", value);
Если вы используете
X
вместо того,x
что предлагает aristar , вам не нужно использовать.toUpperCase()
.источник
Integer.toHexString(42);
Документация Javadoc: http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#toHexString(int)
Обратите внимание, что это может дать вам более двух цифр! (Целое число составляет 4 байта, поэтому вы потенциально можете вернуть 8 символов.)
Вот небольшой прием, чтобы получить заполнение, если вы абсолютно уверены, что имеете дело только с однобайтовыми значениями (255 или меньше):
Integer.toHexString(0x100 | 42).substring(1)
Множество других (и лучших) решений с левым заполнением целых чисел (недесятичный формат) нулями в Java .
источник
String.format("%02X", (0xFF & value));
источник
Используйте
Integer.toHexString()
. Не забудьте заполнить начальным нулем, если в итоге вы получите только одну цифру. Если ваше целое число больше 255, вы получите более двух цифр.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();
источник
StringBuilder
улучшений? pastebin.com/KyS06JMzЕсли вам просто нужно их распечатать, попробуйте следующее:
for(int a = 0; a < 255; a++){ if( a % 16 == 0){ System.out.println(); } System.out.printf("%02x ", a); }
источник
Я использую это, чтобы получить строку, представляющую эквивалентное шестнадцатеричное значение целого числа, разделенного пробелом для каждого байта EX: шестнадцатеричное значение 260 в 4 байтах = 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)); }
источник
По словам Габриэля Оширо, если вы хотите форматировать целое число длиной 8, попробуйте это
String.format("0x%08X", 20) //print 0x00000014
источник