Java에서 두 자리 16 진수 정수


82

Java에서 정수 값을 2 자리 16 진수 값으로 변경해야합니다. 감사

내 가장 큰 숫자는 63이고 가장 작은 숫자는 0입니다. 작은 값에는 선행 0을 원합니다.


인쇄해야합니까? 문자열로 바꿔야하나요?
Ahmed Masud 2011

나는 두 자리 진수로 파일에 기록 할
살리 Erikci에게

적어도 Integer javadoc을 확인 했습니까? 12345656을 2 자리 16 진수 값으로 어떻게 변환 할 계획입니까?
JB Nizet 2011

답변:


147
String.format("%02X", value);

aristar가 제안한대로X 대신 사용 x 하는 경우을 사용할 필요가 없습니다 .toUpperCase().


8
이것은 현재 가장 좋은 답변입니다.
David J.

1
이것이 다른 어떤 것보다 훨씬 낫다는 데 동의했습니다. 완벽하게 작동합니다. 내가 제안하는 유일한 것은 메소드에 전달 된 매개 변수에 대한 설명입니다. 값을 정수 또는 16 진수 문자열로 전달했는지 찾아봐야했습니다.
JRSofty 2014 년

31
Integer.toHexString(42);

Javadoc : http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#toHexString(int)

그러나 이것은 2 자리 이상을 제공 할 수 있습니다. (Integer는 4 바이트이므로 잠재적으로 8자를 되 찾을 수 있습니다.)

다음은 단일 바이트 값 (255 이하) 만 처리하고 있다고 확신하는 한 패딩을 얻기위한 약간의 해킹입니다.

Integer.toHexString(0x100 | 42).substring(1)

Java에서 0이있는 왼쪽 패딩 정수 (십진수가 아닌 형식)의 더 많은 (그리고 더 나은) 솔루션 .


3
멋진 제로 패딩 해킹 :)
Grodriguez 2014 년

1
더 큰 값에 대해 동일한 기술을 사용할 수 있습니다. 최대 2 바이트 값에 대해 패딩을 원하면 Integer.toHexString (0x10000 | value) .substring (1)을 수행 할 수 있습니다. N 16 진수의 경우 "1"뒤에 N 0을 추가합니다. 물론 16 진수 값은 N 자리를 넘지 않아야합니다.
user823981

28
String.format("%02X", (0xFF & value));    

7
누군가 이것이 왜 비트와 0xFF를 사용하는지 설명 할 수 있습니까? 이 SO에 대한 답변은 단지 코드하지 않아야하는 이유입니다
스텔스 랍비

4
OxFF & (바이트) 값은 부호있는 바이트를 부호없는 바이트로 변환합니다. (int) -1 = 0xFFFFFFFF, (int) (-1 & 0xFf) = 0xFF
aristar 2013 년

이 경우 "% 02X"형식으로 인해 비트 단위 및 0xFF가 필요하지 않습니다.
Freek de Bruijn

1
% 02X 지정자는 최소 두 자리를 지정합니다. 정확히 두 자릿수 (상위 비트 버리기)를 원하면 비트 및가 필요합니다.
plugwash

이 추가 정보에 감사드립니다!
tryp

14

사용 Integer.toHexString(). 하나의 숫자로 끝나는 경우 앞에 0으로 채우는 것을 잊지 마십시오. 정수가 255보다 크면 2 자리 이상을 얻게됩니다.

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();

2
StringBuilder실제로 사용이 개선 되었습니까? pastebin.com/KyS06JMz
방금 2013

4

인쇄 만하려는 경우 다음을 시도하십시오.

for(int a = 0; a < 255; a++){
    if( a % 16 == 0){
        System.out.println();
    }
    System.out.printf("%02x ", a);
}

0

나는 이것을 사용하여 모든 바이트에 대해 공백으로 구분 된 정수의 동등한 16 진수 값을 나타내는 문자열을 얻습니다 .EX : 4 바이트에서 260의 hex val = 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));
}

0

GabrielOshiro에 따르면 정수 형식을 길이 8로 지정하려면 다음을 시도하십시오.

String.format("0x%08X", 20) //print 0x00000014
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.