gpt4 book ai didi

java - Java中unicode字符的ASCII码等价物

转载 作者:行者123 更新时间:2023-11-28 03:08:11 26 4
gpt4 key购买 nike

我们在将以下逻辑从 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 代码中获得相同的值。

最佳答案

C++ 程序使用平台的默认编码来表示 char 数据类型中的字符。要在 Java 中执行相同操作,您必须使用 Java 的等效 byte 数据类型,并在计算之前转换字符串:

byte[] bytes = keyValue.getBytes();
for (byte b: bytes) sum += 11*b;

如果还是不行,

  • 检查C++程序中char的符号:大多数编译器默认使用signed chars,这与Java的byte不谋而合。如果您使用无符号字符,则代码需要调整。
  • 首先检查 Java 程序是否正确读取字符串。一种方法是打印字节;给定 красный 你应该得到 [-22, -16, -32, -15, -19, -5, -23]:

    System.out.println(java.util.Arrays.toString(bytes));

关于java - Java中unicode字符的ASCII码等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19151383/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com