Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中读取C静态结构_Java_C_Data Structures - Fatal编程技术网

在java中读取C静态结构

在java中读取C静态结构,java,c,data-structures,Java,C,Data Structures,我在c文件中有一个静态结构,如下所示: static struct my_structure[] = { { TE , -1, TEST, 0, 0, 0 }, { RT , 1, 0, 0, 0, MSG( 670, "Test") }, { RT , 2, 25, 0, 0, MSG(8187, "Test2"), MSG(1215, "Test3") }} 可以直接从java加载结构吗?或者,读

我在c文件中有一个静态结构,如下所示:

static struct my_structure[] = {

{ TE  , -1,    TEST,    0,       0, 0 },
{ RT  ,  1,       0,    0,       0, MSG( 670, "Test") },
{ RT  ,  2,      25,    0,       0, MSG(8187, "Test2"), MSG(1215, "Test3") }}
可以直接从java加载结构吗?或者,读取java对象中的信息的最佳方法是什么


当然,我可以解析文件,但我想知道是否有更好的方法来实现这一点。

虽然您可以使用诸如与C代码轻松交互之类的工具,但也有一些限制。一是需要在Java中声明
my_structure
的结构(JNA不解析C代码,它解析描述C代码和结构的Java代码)。这意味着您必须始终保持两者同步

更糟糕的是,不同的C编译器在结构中有不同的默认值(许多编译器甚至有更改这些默认值的选项)。因此,编译器和/或编译器选项的更改可能会破坏这一脆弱的链接

这就是为什么我建议您编写一些C代码,将内部结构转储到Java可以解析的文件中。为了让事情变得更简单,你可以使用一个或谷歌的


或者在两端以相同的方式解决问题,并将静态结构导出到一个文件中,然后在运行时由C和Java代码解析。

虽然您可以使用类似工具轻松地与C代码交互,但也有一些限制。一是需要在Java中声明
my_structure
的结构(JNA不解析C代码,它解析描述C代码和结构的Java代码)。这意味着您必须始终保持两者同步

更糟糕的是,不同的C编译器在结构中有不同的默认值(许多编译器甚至有更改这些默认值的选项)。因此,编译器和/或编译器选项的更改可能会破坏这一脆弱的链接

这就是为什么我建议您编写一些C代码,将内部结构转储到Java可以解析的文件中。为了让事情变得更简单,你可以使用一个或谷歌的

或者在两端以相同的方式解决问题,并将静态结构导出到一个文件中,然后在运行时由C和Java代码进行解析

  • 最简单也是最快的:我将其转换为JSON,用一些硬连线文本替换,然后用java解释JSON。Java有非常好的json解释库

  • 或者,您可以将该结构编译为C对象(或shredlib或dll),为其编写JNI(java本机接口),然后读取数据并对其进行解释。这将是一个很大的工作

  • 或者,您可以使用java词法分析器来完成此任务

  • 扩展:(1)可能不实用,因为您的C代码使用宏。(1)和(2)之间有一种混合:您使用一点帮助程序代码编译结构,并将结构作为JSON打印到标准输出中。感谢@UniversE的创意

  • 最简单也是最快的:我将其转换为JSON,用一些硬连线文本替换,然后用java解释JSON。Java有非常好的json解释库

  • 或者,您可以将该结构编译为C对象(或shredlib或dll),为其编写JNI(java本机接口),然后读取数据并对其进行解释。这将是一个很大的工作

  • 或者,您可以使用java词法分析器来完成此任务

  • 扩展:(1)可能不实用,因为您的C代码使用宏。(1)和(2)之间有一种混合:您使用一点帮助程序代码编译结构,并将结构作为JSON打印到标准输出中。感谢@UniversE的创意

    不,当然(?)不可能“直接”加载它,您拥有的是C源代码

    您必须解析代码以了解它的“含义”,特别是因为它似乎也在使用C预处理器宏(
    TEST
    MSG()
    很可能是宏)。

    不,当然(?)不可能“直接”加载它,您拥有的是C源代码


    您将不得不解析代码以了解它的“含义”,特别是因为它似乎也在使用C预处理器宏(
    TEST
    MSG()
    很可能是宏).

    您也可以尝试Java,并以其格式描述结构,只需解析并重新映射数据块,从C到Java

    您也可以尝试Java,并以其格式描述结构,只需解析并重新映射数据块,从C到Java

    JSON的想法很好,但硬连接文本替换可能不起作用,因为OP正在使用宏。您需要用C编写一个小助手程序,它使用结构并将其内容作为JSON打印到标准输出。然后,您可以调用此程序并使用管道从java应用程序中读取它。@UniversE非常感谢!:-)JSON的想法很好,但是硬连接文本替换可能不起作用,因为OP使用的是宏。您需要用C编写一个小助手程序,它使用结构并将其内容作为JSON打印到标准输出。然后,您可以调用此程序并使用管道从java应用程序中读取它。@UniversE非常感谢!:-)让我们把测试和消息放在一边。这可以保存在字符串中,我可以解析它。从MSG(1215,“Test3”)中,我只需要“Test3”。让我们把测试和MSG放在一边。这可以保存在字符串中,我可以解析它。从MSG(1215,“Test3”)中,我只需要“Test3”。呃,这是有效的C代码吗?实际的结构类型定义在哪里?呃,那是有效的C代码吗?实际的结构类型定义在哪里?