문제

16 진수를 읽어야하는 J2ME 응용 프로그램이 있습니다. 애플리케이션은 이미 일부 전화기에 너무 커서 다른 코덱을 포함시키지 않거나 우리 자신의 기능을 작성하지 않으려 고 노력합니다.

모든 숫자는 16 진수에서 64 비트 서명 정수입니다. long.parselong (16 진수, 16)은 양수를 올바르게 처리하지만 음수에 대한 예외를 던집니다.

    long l = Long.parseLong("FFFFFFFFFFFFFFFF", 16);

Java 자체에서 제공된 클래스를 사용하여 16 진수에서 -1을 어떻게 얻을 수 있습니까?

어떤 사람들은 Java 예상대로 우리의 16 진수를 -1로 써야한다고 제안 할 수도 있습니다. 죄송합니다. 형식은 프로토콜에 의해 고정되어 있으며 변경할 수 없습니다.

도움이 되었습니까?

해결책

당신의 문제는 그 것입니다 parseLong() 둘의 보완을 처리하지 않습니다. 부호가 ' -'형태로 존재할 것으로 예상됩니다.

CDC 프로필을 위해 개발중인 경우 간단하게 사용할 수 있습니다.

long l = new BigInteger("FFFFFFFFFFFFFFFF", 16).longValue()

그러나 CLDC 프로필에는 해당 클래스가 없습니다. 그곳에서, 당신이 필요한 일을하는 가장 쉬운 방법은 아마도 길게 나누고 두 개의 반쪽으로 구문 분석하고 재결합하는 것입니다. 이것은 작동합니다 :

long msb = Long.parseLong("FFFFFFFF", 16);
long lsb = Long.parseLong("FFFFFFFF", 16);
long result = msb<<32 | lsb;

업데이트

Java 8 기준으로 사용할 수 있습니다 parseUnsignedLong():

long l = Long.parseUnsignedLong("FFFFFFFFFFFFFFFF", 16);

다른 팁

덩어리로 구문 분석하십시오.

    long l = (Long.parseLong("FFFFFFFFF",16)<<32) | Long.parseLong("FFFFFFFF",16);

더 나쁜 사례 시나리오에서는 문자열이 8-F로 시작하는 16 자인지 확인하고, 그렇다면 가장 중요한 비트 세트 (즉, 그 자리에서 8을 빼기)와 동등한 문자로 변경하십시오. 결과를 구문 분석하고 서명 된 길이의 하한에 구문 분석 된 값을 추가합니까? (본질적으로 2의 보완을하고 있습니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top