以下のロジックを 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 コードから同じ値を取得したいと思います。