Java에서는 서명된 바이트를 서명되지 않은 바이트로 변환하는 것이 어려울 수 있습니다. 부호 없는 바이트 유형을 지원합니다. 결과적으로 부호 있는 바이트 값을 그대로 수신하고 해석하면 데이터 무결성 문제가 발생할 수 있습니다.
이를 해결하기 위해 일반적인 솔루션에서는 비트 연산을 사용하는 것이 좋습니다.
public static int unsignedToBytes(byte a) { int b = a & 0xFF; return b; }
그러나 이 방법은 반환된 값을 바이트 유형에 다시 할당하면 여전히 데이터 왜곡으로 이어지는 부호 있는 해석.
이 문제를 해결하는 열쇠는 Java의 기본 요소에 서명이 있지만 메모리에서의 표현은 서명되지 않는다는 점을 이해하는 데 있습니다. 다음은 명시적으로 다운캐스트하여 바이트를 부호 없는 값으로 해석하는 수정된 솔루션입니다.
int i = 200; // 0000 0000 0000 0000 0000 0000 1100 1000 (200) byte b = (byte) i; // 1100 1000 (-56 by Java specification, 200 by convention) /* * When b is cast back to int, sign extension leads to: * 1111 1111 1111 1111 1111 1111 1100 1000 (-56) * * However, we choose to interpret this as +200 instead. */ System.out.println(b); // "-56" /* * To eliminate sign extension, we perform a bitwise AND with 0xFF: * 1111 1111 1111 1111 1111 1111 1100 1000 (the int) * & * 0000 0000 0000 0000 0000 0000 1111 1111 (0xFF) * ======================================= * 0000 0000 0000 0000 0000 0000 1100 1000 (200) */ System.out.println(b & 0xFF); // "200"
위의 예에서는 정수 i를 바이트 b로 다운캐스트하여 값이 음수로 해석됩니다. Java의 부호 있는 바이트 사양을 따릅니다. 그러나 b를 0xFF와 수동으로 비트 AND 연산하면 부호 확장을 효과적으로 지우고 올바른 부호 없는 값을 검색할 수 있습니다.
이 기술을 사용하면 Java에서 부호 없는 바이트 값을 원활하게 사용하여 정확한 데이터 처리를 보장하고 언어의 한계 내에서 해석합니다.
위 내용은 Java에서 서명된 바이트를 서명되지 않은 바이트로 올바르게 처리하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!