第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將 Go 綁定建模到使用聯(lián)合的 C 結(jié)構(gòu)?

如何將 Go 綁定建模到使用聯(lián)合的 C 結(jié)構(gòu)?

Go
胡子哥哥 2021-07-26 12:31:49
我目前正在為libfreefare編寫Go 包裝器。libfreefare 的 API 包含以下函數(shù):struct mifare_desfire_file_settings {    uint8_t file_type;    uint8_t communication_settings;    uint16_t access_rights;    union {    struct {        uint32_t file_size;    } standard_file;    struct {        int32_t lower_limit;        int32_t upper_limit;        int32_t limited_credit_value;        uint8_t limited_credit_enabled;    } value_file;    struct {        uint32_t record_size;        uint32_t max_number_of_records;        uint32_t current_number_of_records;    } linear_record_file;    } settings;};int      mifare_desfire_get_file_settings (MifareTag tag, uint8_t file_no, struct mifare_desfire_file_settings *settings);包裝這樣一個功能的理想解決方案是什么?如果struct mifare_desfire_file_settings不包含任何聯(lián)合,我的包裝器可能看起來像這樣:type DESFireFileSettings struct {    // all fields exported, no methods}func (t DESFireTag) FileSettings(fileNo byte) (DESFireFileSettings, error)我應(yīng)該如何進行?
查看完整描述

1 回答

?
撒科打諢

TA貢獻1934條經(jīng)驗 獲得超2個贊

您需要考慮如何更新聯(lián)合中的字段。顯然,你不能讓用戶在沒有驗證的情況下這樣做。他們可能會進行不一致的更新。考慮做這樣的事情:


package mifare


const (

    MDFTStandarDataFile            = 0x00

    MDFTBackupDataFile             = 0x01

    MDFTValueFileWithBackup        = 0x02

    MDFTLinearRecordFileWithBackup = 0x03

    MDFTCyclicRecordFileWithBackup = 0x04

)


type StandardFile struct {

    FileSize uint32

}


type ValueFile struct {

    LowerLimit           int32

    UpperLimit           int32

    LimitedCreditValue   int32

    LimitedCreditEnabled uint8

}


type LinearRecordFile struct {

    Record_size            uint32

    MaxNumberOfRecords     uint32

    CurrentNumberOfRecords uint32

}


type DESFireFileSettings struct {

    FileType              uint8

    CommunicationSettings uint8

    AccessRights          uint16

    settings              struct {

        StandardFile

        ValueFile

        LinearRecordFile

    }

}


func (fs *DESFireFileSettings) StandardFile() (StandardFile, error) {

    // if not valid for FileType, return error

    return fs.settings.StandardFile, nil

}


func (fs *DESFireFileSettings) SetStandardFile(standardFile StandardFile) error {

    // if not valid for FileType, return error

    fs.settings.StandardFile = standardFile

    return nil

}


func (fs *DESFireFileSettings) ValueFile() (ValueFile, error) {

    // if not valid for FileType, return error

    return fs.settings.ValueFile, nil

}


func (fs *DESFireFileSettings) SetValueFile(valueFile ValueFile) error {

    // if not valid for FileType, return error

    fs.settings.ValueFile = valueFile

    return nil

}


func (fs *DESFireFileSettings) LinearRecordFile() (LinearRecordFile, error) {

    // if not valid for FileType, return error

    return fs.settings.LinearRecordFile, nil

}


func (fs *DESFireFileSettings) SetLinearRecordFile(linearRecordFile LinearRecordFile) error {

    // if not valid for FileType, return error

    fs.settings.LinearRecordFile = linearRecordFile

    return nil

}



查看完整回答
反對 回復(fù) 2021-08-02
  • 1 回答
  • 0 關(guān)注
  • 217 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號