- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个二进制文件,它是由一个用 C 编写的开源应用程序创建的。由于它是开源的,所以我可以在将数据写入文件时看到数据的结构。问题是我不懂 C,但我至少可以大致知道在声明结构时发生了什么。但是从我在其他帖子中看到的情况来看,这并不像在 C# 中创建一个具有与 C 中相同数据类型的结构那么简单。
我找到了这篇文章 https://stackoverflow.com/a/3863658/201021它有一个用于翻译结构的类,但(据我所知)您需要在 C# 中正确声明该结构才能使其工作。
我读过 MarshalAs attribute和 StructLayout 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/
我是一名优秀的程序员,十分优秀!