IT

16진수 문자열을 int로 변환

itgroup 2022. 10. 18. 21:40
반응형

16진수 문자열을 int로 변환

많은 다른 값에 대한 문자열 비교가 아닌 int 비교를 할 수 있도록 16진수 코드의 8자 길이의 문자열을 정수로 변환하려고 합니다.

C++에서는 매우 사소한 일이지만 자바에서는 해야 합니다.제가 만족해야 할 테스트 케이스는 기본적으로 "AA0F245C"를 int로 변환한 후 해당 문자열로 다시 변환하여 올바르게 변환하고 있음을 확인하는 것입니다.

다음을 시도했습니다.

int decode = Integer.decode("0xAA0F245C");  // NumberFormatException
int decode2 = Integer.decode("AA0F245C"); //NumberFormatException
int parseInt = Integer.parseInt("AA0F245C", 16); //NumberFormatException
int valueOf = Integer.valueOf("AA0F245C", 16); //NumberFormatException

한 번에 두 글자씩 해서 결과를 곱해봤는데 변환은 되는데 숫자가 틀려요.

int id = 0;
for (int h = 0; h < hex.length(); h= h+2)
{
    String sub = hex.subSequence(h, h+2).toString();

if (id == 0)
    id = Integer.valueOf(sub, 16);
else
    id *= Integer.valueOf(sub, 16);             
 }
//ID = 8445600 which = 80DEA0 if I convert it back. 

서드파티 라이브러리는 사용할 수 없기 때문에 Java 표준 라이브러리에서 사용해야 합니다.

잘 부탁드립니다.

int(서명된 4바이트)치고는 너무 큽니다.

사용하다

Long.parseLong("AA0F245C", 16);

그렇게 써도 좋다

System.out.println(Integer.decode("0x4d2"))    // output 1234
//and vice versa 
System.out.println(Integer.toHexString(1234); //  output is 4d2);

Java의 최대값Integercan handle 은 2147483657 또는 2^31-1 입니다.16진수 AA0F245C는 2853119068로 10진수로서 너무 크므로 를 사용해야 합니다.

Long.parseLong("AA0F245C", 16);

할 수 있을 것 같아요

해석으로 쉽게 할 수 있다형식 매개 변수가 있는 Int.

Integer.parseInt("-FF", 16) ; // returns -255

javadoc 정수

정답은 다음과 같습니다.

myPassedColor = "#ffff8c85" int colorInt = Color.parseColor(myPassedColor)

권장되는 옵션 중 하나로서BigInteger16진수 값이 종종 sha256이나 sha512와 같은 큰 숫자이기 때문에, 그것들은 쉽게 오버플로우 될 것입니다.int및 along. 다른 답변과 같이 바이트 배열로 변환하는 것도 옵션이지만,BigInterger자주 잊어버리는 자바 클래스도 옵션입니다.

String sha256 = "65f4b384672c2776116d8d6533c69d4b19d140ddec5c191ea4d2cfad7d025ca2";
BigInteger value = new BigInteger(sha256, 16);
System.out.println("value = " + value);
// 46115947372890196580627454674591875001875183744738980595815219240926424751266

서명된 바이트의 16진수 표현을 2문자 문자열에서 바이트(Java에서는 항상 서명)로 변환해야 하는 사용자를 위해 예를 제시하겠습니다.16진수 문자열을 구문 분석해도 음수가 나오지 않습니다.어떤 관점에서는 0xFF는 -1(2의 보완 부호화)이기 때문입니다.이 원리는 착신 스트링을 바이트보다 큰 int로 해석한 후 음수로 묶는 것입니다.바이트만 표시하므로 이 예제는 충분히 짧습니다.

String inputTwoCharHex="FE"; //whatever your microcontroller data is

int i=Integer.parseInt(inputTwoCharHex,16);
//negative numbers is i now look like 128...255

// shortly i>=128
if (i>=Integer.parseInt("80",16)){

    //need to wrap-around negative numbers
    //we know that FF is 255 which is -1
    //and FE is 254 which is -2 and so on
    i=-1-Integer.parseInt("FF",16)+i;
    //shortly i=-256+i;
}
byte b=(byte)i;
//b is now surely between -128 and +127

더 긴 숫자를 처리하도록 편집할 수 있습니다.FF 또는 00를 각각 더 추가합니다.8개의 16진수 부호 정수를 해석하려면 Long.parseLong을 사용해야 합니다.정수 -1인 FFFF-FFF는 양수(예: 4294967295)로 나타낼 때 Integer에 맞지 않기 때문입니다.보관하려면 롱이 필요해요음수로 변환한 후 Integer로 다시 주조하면 적합합니다.끝에 정수가 들어가지 않는 8자 16진 문자열은 없습니다.

//Method for Smaller Number Range:
Integer.parseInt("abc",16);

//Method for Bigger Number Range.
Long.parseLong("abc",16);

//Method for Biggest Number Range.
new BigInteger("abc",16);

다음을 사용해 보십시오.

long abc = string2Hex("1A2A3B");

private  long  convertString2Hex(String numberHexString)
{
    char[] ChaArray = numberHexString.toCharArray();
    long HexSum=0;
    long cChar =0;

    for(int i=0;i<numberHexString.length();i++ )
    {
        if( (ChaArray[i]>='0') && (ChaArray[i]<='9') )
            cChar = ChaArray[i] - '0';
        else
            cChar = ChaArray[i]-'A'+10;
        HexSum = 16 * HexSum + cChar;
    }
    return  HexSum;
}

언급URL : https://stackoverflow.com/questions/11194513/convert-hex-string-to-int

반응형