C/C++中的字符数据类型

Char data type in C/C++

本文关键字:字符 数据类型 C++      更新时间:2023-10-16

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

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

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

正如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");

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

单引号和双引号在C中的含义截然不同。单引号中包含的字符与排序序列中表示该字符的整数完全相同(例如,在ASCII实现中,"A"的含义与97完全相同)。

但是,用双引号括起来的字符串是一种简单的方法,可以将指针写入已用引号之间的字符和二进制值为0的额外字符初始化的无名数组的初始字符。

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

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