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

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

用C語言序列化數(shù)據(jù)結構

用C語言序列化數(shù)據(jù)結構

C
互換的青春 2019-08-26 19:02:58
用C語言序列化數(shù)據(jù)結構我想要一個可以將我的數(shù)據(jù)結構序列化到磁盤的C庫,然后再加載它們。它應該接受任意嵌套的結構,可能使用循環(huán)引用。我認為這個工具需要一個描述我的數(shù)據(jù)結構的配置文件。允許庫使用代碼生成,盡管我很確定沒有它就可以這樣做。注意我對數(shù)據(jù)可移植性不感興趣。我想將它用作緩存,所以我可以依賴不改變的環(huán)境。謝謝。結果有人建議Tpl是一個很棒的庫,但我相信它不會做任意的對象圖,例如每個包含兩個其他節(jié)點的節(jié)點樹。另一個候選人是Eet,這是Enlightenment窗口管理器的一個項目??雌饋砗苡腥さ?,似乎沒有能力序列化嵌套結構。
查看完整描述

3 回答

?
吃雞游戲

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

看看tpl。從概述:

Tpl是一個用于序列化C數(shù)據(jù)的庫。數(shù)據(jù)以其自然二進制形式存儲。API很小,并試圖保持“不礙事”。與使用XML相比,tpl在C程序中使用更快,更容易。Tpl可以序列化許多C數(shù)據(jù)類型,包括結構。


查看完整回答
反對 回復 2019-08-26
?
海綿寶寶撒

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

我知道你要的是一個圖書館。如果你找不到一個(:: boggle ::,你認為這是一個已經(jīng)解決的問題?。?,這里有一個解決方案的大綱:

您應該能夠編寫代碼生成器[1]來序列化樹/圖,而無需(運行時)預處理相當簡單。

您需要解析節(jié)點結構(typedef處理?),并以直接的方式編寫包含的數(shù)據(jù)值,但要小心處理指針。

  • 對于指向char *name;知道單獨引用的其他對象(即)的指針,您可以直接序列化目標數(shù)據(jù)。

  • 對于可能被多次引用的對象以及樹的其他節(jié)點,您必須表示指針結構。每個對象都被分配一個序列號,這是指針寫入的內容。保持當前內存位置和序列號之間的轉換結構。在遇到指針時,查看它是否已經(jīng)分配了一個數(shù)字,如果沒有,則給它一個并將該對象排隊以進行序列化。

回讀還需要一個節(jié)點 - #/內存位置轉換步驟,并且在兩次傳遞中可能更容易做到:用指針槽中的節(jié)點號重新生成節(jié)點(壞指針,被警告)以找出每個節(jié)點獲得的位置放,然后再次走結構固定指針。

我對tpl一無所知,但你可能會捎帶它。


磁盤/網(wǎng)絡格式應該包含一些類型信息。你需要一個名稱修改方案。


[1] ROOT使用這種機制在C ++中提供非常靈活的序列化支持。


遲到:我覺得這并不總是像我上面暗示的那樣容易??紤]以下(設計和設計不當)聲明:

enum {
   mask_none = 0x00,
   mask_something = 0x01,
   mask_another = 0x02,
   /* ... */
   mask_all = 0xff};typedef struct mask_map {
   int mask_val;
   char *mask_name;} mask_map_t;mask_map_t mask_list[] = {
   {mask_something, "mask_something"},
   {mask_another, "mask_another"},
   /* ... */};struct saved_setup {
   char* name;
   /* various configuration data */
   char* mask_name;
   /* ... */};

并假設我們初始化struct saved_setup項目以便mask_name指向mask_list[foo].mask_name。

當我們去序列化數(shù)據(jù)時,我們該怎么做struct saved_setup.mask_name?

您需要注意設計數(shù)據(jù)結構和/或為序列化過程帶來一些特定于案例的智能。


查看完整回答
反對 回復 2019-08-26
  • 3 回答
  • 0 關注
  • 1149 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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