2012-10-31 3 views
-1

내가 자바 byte 범위는 -128 ~ 127 알지만, C++ BYTE 자바에 나는 C를 변환 할 unsigned char자바 바이트 ++ BYTE

(0 ~ 255) ++ 함수이며, C++에서 내가 가진 a LPBYTE (BYTE 배열에 대한 포인터입니다.) LPBYTE 대신 byte 배열을 C++ 함수에서 사용해 보았지만 Java 함수가 여전히 올바르게 작동하지 않습니다.

내 C++ 기능은 BMP 파일에서 작동하며 알고리즘은 사용자 정의 된 런 길이 인코딩입니다. Java로 변환 할 때 BufferedImage을 사용하고 내용을 byte[]으로 가져 왔습니다. Java 함수가 형식 불일치로 인해 올바르게 작동하지 않는다고 생각합니다.

Java에서 사용해야하는 유형은 무엇입니까?

+4

C++에는 표준 형식 인 'BYTE'가 없습니다. 이것은 typedef/define으로, 보통'unsigned char'이지만, 지금까지'char' 일 수 있습니다. –

+0

@robjb 어떻게 할 수 있습니까? –

답변

6

자바에서는 일반 byte을 사용할 수 있으며 b & 0xFF

당신이 자바는 포인터를 지원하지 않습니다 당신은 자바 바이트에 대한 포인터를 전달할 수 없다는 것입니다 가지고있는 문제와 요구와 같은 int을 변환합니다. 가장 가까운 값은 byte[]입니다.

RLE 인코딩 만 수행하는 경우 실제 바이트 값은 중요하지 않으므로 서명 여부에 관계 없습니다. BMP 파일을 디코딩하는 경우 위에서 설명한대로 마스크를 사용할 수 있습니다.

바이트 배열을 읽고 쓸 때 일반적인 해결책은 ByteBuffer를 사용하는 것입니다. 이는 리틀 엔디안 또는 빅 엔디안 순서로 short 또는 int과 같은 긴 유형을 쓰는 것을 지원하며 사전에 정확한 길이를 알 필요가 없습니다.

1

Java에는 부호없는 유형이 없습니다 (char은 16 비트 임). 따라서 선택의 여지가 없으므로 byte을 선택하십시오. 그러나 부호가있는 정수로 작동하도록 코드를 다시 작성하십시오. 이 에 대한 도움이 필요한 경우 코드를 게시하십시오.

1

Java에는 부호없는 바이트 유형이 없습니다. 대신 short을 사용할 수 있습니다. 0에서 255까지의 모든 값을 나타낼 수 있습니다.

+0

실제로 내가 BufferedImage를 사용해야하는데 ByteArrayOutputStream을 사용하여 파일 내용을 가져오고 바이트 []를 반환하므로 바이트 단위로 내용을 읽어야하고 짧게 캐스트해야합니다. 맞습니까? –