【问题标题】:Vala file binary to struct like used c freadVala 文件二进制结构,如使用的 c fread
【发布时间】:2019-09-16 13:58:35
【问题描述】:

我正在尝试将二进制文件直接转换为结构。我可以在 c 上做到这一点,但我不知道如何在 vala 上做到这一点。我把 C 和 Vala 代码示例放在下面。


struct Header
{
    char name[30]; // PK2 internal name
    uint32_t version; // version
    uint8_t encryption; // does have encryption?
    uint8_t verify[16]; // used to test the blowfish key
    uint8_t reserved[205]; // unused
};

read_count = fread(&m_header, 1, sizeof(Header), m_file);
    if(read_count != sizeof(Header))
    {
        fclose(m_file);
    }

我正在尝试对 vala 做同样的事情。但我从来没有。

struct Header
{
    char  Header[30];          //JoyMax File Manager!
    uint    Version;        //0x02000001
    uint8    Encrypted;
    uint8  Verify[16];          // Used to test the blowfish key
    uint8  reserved[205];        // Unused
}

void main()
{
    var file = FileStream.open ("file.bin","r+");

    char name[30] = {0};
    file.gets (name);
    print((string)name);
}

有没有办法像 fread 一样直接从文件转换为结构?

【问题讨论】:

    标签: filestream vala


    【解决方案1】:

    您可以将结构转换为uint8[],然后像这样调用File.read

    void main()
    {
        var file = FileStream.open ("file.bin","r+");
    
        Header header = new Header ();
        file.read ((uint8[]) header);
        stdout.printf ((string) header.Header);                                                                                                                                                                       
    }
    

    免责声明:这显然不是非常安全的代码,printf 仅适用于正确以零结尾的 Header 成员。

    【讨论】:

      猜你喜欢
      • 2015-08-22
      • 1970-01-01
      • 2019-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多