gpt4 book ai didi

c# - 如何将 C 数据结构转换为允许您从文件中读取数据类型的 C# 结构?

转载 作者:太空宇宙 更新时间:2023-11-04 02:05:55 25 4
gpt4 key购买 nike

我有一个二进制文件,它是由一个用 C 编写的开源应用程序创建的。由于它是开源的,所以我可以在将数据写入文件时看到数据的结构。问题是我不懂 C,但我至少可以大致知道在声明结构时发生了什么。但是从我在其他帖子中看到的情况来看,这并不像在 C# 中创建一个具有与 C 中相同数据类型的结构那么简单。

我找到了这篇文章 https://stackoverflow.com/a/3863658/201021它有一个用于翻译结构的类,但(据我所知)您需要在 C# 中正确声明该结构才能使其工作。

我读过 MarshalAs attributeStructLayout attribute .我主要了解如何使用它们来控制数据类型的物理结构。我想我缺少的是细节。

我并不是要求有人将 C 数据结构转换为 C#。我真正想要的是一些指向信息的指针,这些信息将帮助我弄清楚如何自己做。我有另一个格式略有不同的二进制文件可供阅读,因此非常感谢有关此主题的一些常识。

如何将 C 数据结构转换为允许您从文件中读取数据类型的 C# 结构?

注意事项:具体来说,我正在尝试读取 Tomato 路由器固件输出的 rstats 和 cstats 文件。此文件包含带宽使用数据和 ip 流量数据。

数据结构的 C 代码是(来自 rstats.c):

#define MAX_COUNTER 2
#define MAX_NSPEED ((24 * SHOUR) / INTERVAL)
#define MAX_NDAILY 62
#define MAX_NMONTHLY 25

typedef struct {
uint32_t xtime;
uint64_t counter[MAX_COUNTER];
} data_t;

typedef struct {
uint32_t id;

data_t daily[MAX_NDAILY];
int dailyp;

data_t monthly[MAX_NMONTHLY];
int monthlyp;
} history_t;

typedef struct {
char ifname[12];
long utime;
unsigned long speed[MAX_NSPEED][MAX_COUNTER];
unsigned long last[MAX_COUNTER];
int tail;
char sync;
} speed_t;

最佳答案

我认为您的第一个链接 https://stackoverflow.com/a/3863658/201021是一个很好的方法。所以我想接下来的事情是构建一个 C# 结构来映射 C 结构。这是来自 MSDN http://msdn.microsoft.com/en-us/library/ac7ay120(v=vs.110).aspx 的不同类型的映射

干杯!

关于c# - 如何将 C 数据结构转换为允许您从文件中读取数据类型的 C# 结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20589694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com