2011-07-06 4 views
2

암호화 된 형식의 C++ 프로그램으로 만든 하나의 파일이 있습니다. 내 자바 프로그램에서 그것을 읽고 싶다. 파일 내용을 해독하는 경우 해독 알고리즘이 바이트 [c/C++에서 부호없는 char-BYTE 임]에 대한 연산을 수행하고 있습니다. 내 c/C++ 프로그램에서 사용한 것과 동일한 암호 해독 알고리즘을 사용했습니다. 이 알고리즘은 바이트에 대해 ^, %, * 및 - 연산을 포함합니다. 그러나 Java의 바이트 데이터 유형이 서명 되었기 때문에 해독에 문제가 있습니다. 서명이없는 한 번에 1 바이트 씩 읽거나 읽는 방법은 무엇입니까? 사전에 감사합니다. 자바에서 C++ 프로그램으로 만든 파일을 읽는 방법은 무엇입니까?

답변

1

표준 방법 InputStream.read() 한 바이트 데이터를 읽어 들여, INT로 적합한 i로 작업을 수행. Java에는 부호가없는 기본 데이터 유형이 없으므로 유일한 접근법은 상위 프리미티브에 맞도록하는 것입니다.

파일에서 읽은 데이터 바이트에 대해 암호화/암호 해독을 수행하는 데 문제가 없어야합니다. 바이트는 서명되었거나 서명되지 않은 것으로 해석 되어도 상관 없으므로 (0xFF는 255 또는 -1 일 수 있음) . alghorithm에 "^, %, *"등이 들어 있다고 해봅시다. 이것은 문자 인코딩 (문자 당 8 비트에 맞음)을 고려한 원시 바이트의 해석입니다. 원시 바이트가 아닌 다른 암호화/암호 해독 작업을 수행해서는 안됩니다.

+0

내 암호 해독 알고리즘 ((CipherByte^(Key % 32)) - (Key * Key))이며 여기에서 사용 된 모든 변수는 byte 유형입니다. 두 개의 연속 된 바이트를 해독 한 후 짧은 값으로 변환하려고합니다. – gauri

+0

설명 된대로 int 내부에 바이트를 넣어야합니다. 바이트 값 = -1을 얻으면; 마스크를 적용하는 트릭을 얻을 수 있습니다. int unsignedValue = value & 0xFF (십진수 255); –

1

먼저 InputStream.read()는 int를 반환하지만 바이트를 보유합니다. 그것은 int를 사용하므로 EOF에 도달하면 -1을 반환 할 수 있습니다. int가 -1이 아닌 경우, 그것을 byte로 캐스트 할 수 있습니다.

둘째,()는 (바이트 []의 파일을 사용하려는 경우 []

그리고 마지막으로, 그리고 너무 크지 바이트에 직접 바이트를 저장 할 수 metods이 읽기) 아마도 FileInputStream에서 데이터를 복사하여 ByteArrayOutputStream에 기록하는 것이 흥미로울 것입니다. 늦은 객체에서 결과 byte []를 얻을 수 있습니다 (참고 : .read() 메서드를 사용하지 말고, 성능을 위해 .read (byte [], int, int)를 사용하십시오). 실제로 그것이 unsinged 바이트 정도로

5
byte b = <as read from file>; 
int i = b & 0xFF; 

는 필요

1

Java에 부호가없는 기본 유형이 없으므로 서명 된 바이트를 정수로 변환하는 것이 좋습니다. 실제로 정수는 항상 양수이므로 부호가 없습니다. 여기에서 코드를 따라 가면 변환 할 수 있습니다 : Can we make unsigned byte in Java.

관련 문제