5

我正在尝试在 Java 中调用 C++ DLL。在其 C++ 头文件中,有以下几行:

    #define a '102001'
    #define b '102002'
    #define c '202001'
    #define d '202002'

a、b、c 和 d 的数据类型是什么?它们是 char 还是 char 数组?我应该转换成的Java中对应的数据类型是什么?

4

2 回答 2

5

正如Mysticial 所指出的,这些是多字符文字。它们的类型取决于实现,但可能是 Java long,因为它们使用 48 位。

在 Java 中,您需要long手动将它们转换为:

static long toMulticharConst(String s) {
    long res = 0;
    for (char c : s.toCharArray()) {
        res <<= 8;
        res |= ((long)c) & 0xFF;
    }
    return res;
}

final long a = toMulticharConst("102001");
final long b = toMulticharConst("102002");
final long c = toMulticharConst("202001");
final long d = toMulticharConst("202002");
于 2012-07-20T02:03:52.393 回答
1

我可能会尝试回答前两个问题。不熟悉java,最后一个问题留给其他人。

单引号和双引号在 C 中表示非常不同的东西。单引号括起来的字符与在整理序列中表示它的整数相同(例如,在 ASCII 实现中,'a' 表示与 97 完全相同)。

但是,用双引号括起来的字符串是编写指向无名数组的初始字符的指针的简便方法,该数组已使用引号之间的字符和二进制值为 0 的额外字符进行了初始化。

因为整数总是足够大以容纳多个字符,所以C 编译器的某些实现允许字符常量和字符串常量中包含多个字符,这意味着写 'abc' 而不是 "abc" 很可能不会被检测到。然而,“abc”表示指向包含 4 个字符(a、b、c 和 \0)的数组的指针,而“abc”的含义取决于平台。许多 C 编译器将其理解为“由字符 a、b 和 c 的值组成的整数。

有关更多信息,您可以阅读“C 陷阱和陷阱”一书的第 1.4 章

于 2012-07-20T02:52:47.020 回答