C/C++中的字符数据类型
Char data type in C/C++
我正在尝试用Java调用C++DLL。在其C++头文件中,有以下几行:
#define a '102001'
#define b '102002'
#define c '202001'
#define d '202002'
a、b、c和d的数据类型是什么?它们是char还是char数组?我应该转换成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章
相关文章:
- 防止主数据类型C++的隐式转换
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在C++中打印指向不同基元数据类型的指针的内存地址
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何计算数据类型的范围,例如int
- C++中数据类型修饰符的顺序
- 如何获取C++字符数据类型的地址
- 将空格作为单字符数据类型的输入?
- C++ - 使用结构数据类型将单词中的单个小写字符更改为大写,反之亦然
- 在结构数据类型中更改每个字符的 ASCII 值
- 字符串中单个字符作为数组的数据类型是什么
- 如何在一行中从不同的变量(数据类型)创建一个字符数组?
- 如何在宽字符数组的末尾附加一个零字符,以制作这种奇怪的 PCZZWSTR winapi 数据类型
- C++ 个字符数据类型的用途是什么?为什么不直接使用字符串?
- 将字符数组解释为多个连接的数据类型
- 在整数数据类型和连续两个字符类型之后.第 2 个字符的数据类型跳过..为什么
- 如何将char数据类型用作数字而不是字符
- C/C++中的字符数据类型
- "byte"数据类型包含奇怪的字符
- 哪种数据类型用于C#中的无符号字符