Vala двоичен файл за структуриране като използван c fread

Опитвам се да конвертирам директно от двоичен файл в структура. Мога да го направя на 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);
    }

Опитвам се да направя същото с вала. Но никога не съм го правил.

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?


person SDClowen    schedule 16.09.2019    source източник


Отговори (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 член.

person Jens Mühlenhoff    schedule 16.09.2019