将 C 或 C++ 常量转换为 Java

Posted

技术标签:

【中文标题】将 C 或 C++ 常量转换为 Java【英文标题】:convert C or C++ constant to Java 【发布时间】:2018-02-23 07:52:04 【问题描述】:

我有以下 C 或 C++ 常量:

static const char *selstr2 = "oooo"
                             "oC o"
                             "o  o"
                             "oooo";

现在我不明白 Java 中有什么类似的东西。它是 Java 字符串还是 String[]?

【问题讨论】:

试试public static final String CONST = "oooooC oo ooooo"; 【参考方案1】:

首先,请注意,在此上下文中,您的 C 样式字符串是等效的,在此上下文中对多行表示和连续 "" 的连接行为进行非混淆处理后,到

static const char *selstr2 = "oooooC oo  ooooo";

selstr2 是指向 C 中的 char[17] 文字和 C++ 中的 const char[17] 文字的指针,它衰减const char* 指针类型。请注意这里 C 和 C++ 的重要区别:虽然类型不是 C 中的const,但您仍然不能修改内容。

您可能会认为这等同于java.lang.String。但这不是两个重点:(1) Java 字符串更宽;它们由 Java char 类型组成,它们是 16 位无符号类型。并且 (2) NUL 终止符没有被指定、隐含,甚至可能不存在。

因此我会说java.lang.String 更接近于使用 UTF-16 编码 的 C++ std::basic_string<std::uint16_t>,并且 C 风格的字符串在许多方面最接近字节数组在 Java 中,末尾有一个额外的 0。

说了这么多,你可能会发现

static final java.lang.String selstr2 = "oooooC oo  ooooo";

将适合目的,除非您打算在两种语言之间进行互操作。

【讨论】:

非常感谢!我需要一些时间来完成将代码移植到 Java 以对其进行验证。【参考方案2】:

相当于String。 (无论如何,C 字符串都非常接近。)

在 C 和 C++ 中,仅由空格分隔的字符串文字被视为单个长文字。

【讨论】:

以上是关于将 C 或 C++ 常量转换为 Java的主要内容,如果未能解决你的问题,请参考以下文章

为啥从字符串常量转换为 'char*' 在 C 中有效但在 C++ 中无效

C++ 或 Java 中的类型转换和类型转换有啥区别?

将 Fortran 转换为 C 或 C++

哪些开源 C 或 C++ 库可以将任意 UTF-32 转换为 NFC? [关闭]

如何使用 C 或 C++ 将 .caf 文件转换为 .wav?

带有构造函数的简单类引发警告:ISO C++ 禁止将字符串常量转换为 'char*' [重复]