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의 최대값Integer
can handle 은 2147483657 또는 2^31-1 입니다.16진수 AA0F245C는 2853119068로 10진수로서 너무 크므로 를 사용해야 합니다.
Long.parseLong("AA0F245C", 16);
할 수 있을 것 같아요
해석으로 쉽게 할 수 있다형식 매개 변수가 있는 Int.
Integer.parseInt("-FF", 16) ; // returns -255
정답은 다음과 같습니다.
myPassedColor = "#ffff8c85" int colorInt = Color.parseColor(myPassedColor)
권장되는 옵션 중 하나로서BigInteger
16진수 값이 종종 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
'IT' 카테고리의 다른 글
IntelliJ Import 정리 (0) | 2022.10.18 |
---|---|
Hibernate Validator 4.1+에서는 @NotNull, @NotEmpty 및 @NotBlank의 차이점은 무엇입니까? (0) | 2022.10.18 |
Srow Error('msg') vs Throw new Error('msg') (0) | 2022.10.18 |
왜 process.env인가.NODE_ENV가 정의되지 않았습니까? (0) | 2022.10.18 |
ERROR 1044(42000):사용자 "@"localhost"에 대해 데이터베이스 "db"에 대한 액세스가 거부되었습니다. (0) | 2022.10.18 |