我们在将以下逻辑从 C++ 移植到 Java 时遇到了问题。Java 方法应该返回与 C++ 函数相同的值。如果 keyValue 包含非 ASCII 字符,则逻辑失败。
C++ 函数如下所示,
int CMyClass::KeyToId( const char *keyValue ) {
int sum = 0, len = strlen( keyValue );
// Get a sum based on the characters in the string.
// Each character contributes + <ASCII-value> * 11.
for( int i = 0; i < len; i++ ) sum += keyValue[i] * 11;
// Modulo the result to get a value in the standard range.
return sum;
}
在第 #2 行,keyValue[i] 被转换为 8 字节的 ascii 代码。
Java 的确切端口如下所示:
private int keyToId(String keyValue) {
int sum = 0, len = keyValue.length();
// Get a sum based on the characters in the string.
// Each character contributes + <ASCII-value> * 11.
for( int i = 0; i < len; i++ )
sum += keyValue.charAt(i) * 11;
return sum;
}
在 Java 中,字符 keyValue.charAt(i) 被转换为“unicode”值。我想不出一种简单的方法将其转换为等效的 ASCII 码。C++ 应用程序是非 unicode 应用程序。请假设,我们无法更改 C++ 逻辑。
更多输入:我正在用俄语运行应用程序。对于 красный 的输入,C++ 应用程序返回 -1452。我想从 Java 代码中获得相同的值。