c# - 由旧 C 代码编写的文件,已移至 C#

标签 c# c file binary

我正在努力将旧的 C 程序(目前在 UNIX 上运行)转换为我们的 C# 系统。

该程序将一些数据构建到多个结构中,然后使用如下的一系列 fwrites 写入一个文件:

fwrite ( &loc,  sizeof ( struct loc_items ),  1, hdata.fp );

loc 是数据,struct loc_items 是它所属的结构。

我的问题是我是否能够将此文件输出与 C# 相匹配?假设我可以匹配 float 、整数等的字节序格式和大小。

因为它在 fwrite 中写入整个结构,所以我不知道它写入结构的不同变量的顺序。 fwrite 可能放置的结构周围的填充也有任何问题吗?

有什么建议吗?

最佳答案

您有多种选择。

  • 使用 BinaryWriter 并单独写入结构的每个字段。
  • 使用编码获取结构的字节数组并将其写入您的流。
  • 使用像 Miguel de Icaza 的结构库这样的库。

就个人而言,我不喜欢在这种情况下使用编码。我会简单地向您的结构或类添加一些“打开/保存”、“读/写”、“水化/脱水”、“序列化/反序列化”方法。

class POCO {
    int aaa;
    double bbb;

    public void Read(BinaryReader r) {
        aaa = r.ReadInt32();
        bbb = r.ReadDouble();
    }
    public void Write(BinaryWriter w) {
        w.Write(aaa);
        w.Write(bbb);
    }
}

这样,您就可以完全控制读取和写入的内容。

关于c# - 由旧 C 代码编写的文件,已移至 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1595791/

相关文章:

javascript - C# 将日期时间转换为日期 javascript

c - mmap 返回 ENOMEM

c - GCC 如何初始化自动变量?它们保证为 0 吗?

C:在文件中搜索字符串

sql-server - 使用 Powershell 从存储过程返回的数据(大型 XML 文件)从 ReportServer 输出 XML 时如何停止截断数据

c# - Entity Framework 存储过程结果映射

c# - 将元组字典中的值汇总到c#中的新字典

ruby-on-rails - 如何将GarageBand(.band)文件上传到我的Rails应用程序?

c# - C#可枚举范围

c - LIBUMEM 说没有内存泄漏,但 Solaris 上的 PRSTAT 显示泄漏?