저는 C++ 프로그램을 Java로 변환하고 다음과 같은 방법으로 완전히 망가졌습니다. 이 방법이 무엇을하고 있는지 설명 할만큼 충분히 친절하십니까?C++ 비트 패턴을 Java로 변환
long TSBCA::GetSignedValue(const NDataString &value)
{
static NDataString s;
s = value;
long multiplier(1);
size_t len(s.Len());
if (len != 0)
{
if (s[0] >= (char)0xB0 && s[0] <= (char)0xB9)
{
s[0] &= 0x7F; //Bit Pattern: 0111 1111
multiplier = -1;
}
else if (s[len - 1] >= (char)0xB0 && s[len - 1] <= (char)0xB9)
{
s[len - 1] &= 0x7F; //Bit Pattern: 0111 1111
multiplier = -1;
}
else
multiplier = 1;
}
else
multiplier = 1;
return s.ToLong() * multiplier;
}
편집 :
내 초기 Java 버전 :
private long getSignedValue(final String value){
byte[] bytes = value.getBytes();
int length = bytes.length;
long multiplier = 1L;
if (bytes.length > 0){
if (bytes[0] >= (char)0xB0 && bytes[0] <= (char)0xB9){
bytes[0] &= 0x7F; //Bit Pattern: 0111 1111
multiplier = -1;
}
else if (bytes[length - 1] >= (char)0xB0 && bytes[length - 1] <= (char)0xB9)
{
bytes[length - 1] &= 0x7F; //Bit Pattern: 0111 1111
multiplier = -1;
}
else
multiplier = 1;
}
else
multiplier = 1;
return Long.parseLong(Arrays.toString(bytes))* multiplier;
}
내가 잘 했나요?
NDataString? 목표 C가 아닌가요? –
회사 코드를 온라인으로 게시하는 대신 문제를 약간 격리시키지 않으시겠습니까? –
BTW, 복잡하고 복잡한 것처럼 보이기 때문에 이것이 마음을 아프게한다면, 좋습니다! 나는 그것을 선명하고 명확한 코드의 예라고 부르지 않을 것이다. –