我正在將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嗎? – 2009-12-01 21:17:40
難道你不想將問題隔離一點,而不是在線發佈公司的代碼? – 2009-12-01 21:19:18
順便說一下,如果這讓你的頭腦發熱,因爲它顯得複雜而複雜,好!我不會把它稱爲好的,明確的代碼的例子。 – 2009-12-01 22:25:45