<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

    Ruby處理二進制

    Posted on 2008-01-25 18:56 dennis 閱讀(1676) 評論(0)  編輯  收藏 所屬分類: 動態語言
        分析二進制協議或者存取二進制文件是個很常見的需求,Ruby的IO提供了對二進制的讀操作,但是寫入卻只提供字符。并且讀的操作也比較笨拙,例如,在c里面的話,我們一般是定義個struct,然后:

    fread(record, sizeof(record), 1, stream);

    在java里,也是比較容易,特別是nio引入了ByteBuffer之后就更方便了。Ruby的話,我得自己確定讀多少個字節,并自己“組裝”成原始數據,這顯然太麻煩了,幸好,我們有bit-struct :)
        到主頁下載,解壓之后參照README安裝下就OK了。使用的話,也是先定義結構,然后new就行了:
    require 'bit-struct'
    class Message < BitStruct
        signed :msg_length,
    32
        
    char   :type,24
        signed :uid,
    32
        unsigned :cmd,
    16
        rest  :body
    end
    msg
    =Message.new
    file.read(msg)
    p msg.inspect

    bit-struct支持float,char,unsigned,signed,text,pad,nest,oct,hex,其中nest用于聲明一個嵌套結構,例如:
    class Sub < BitStruct
        unsigned :x,    
    8
     end

    class A < BitStruct
        nest    :n,  Sub
    end

    = A.new
    p a  
    # ==> #<A n=#<Sub x=0>>

    如果你看下源碼的話,會發現BitStruct繼承String類,因此IO可以直接將BitStruct寫入文件,內部自動幫你處理轉換細節。

    主站蜘蛛池模板: 国产亚洲精品不卡在线| 免费国产综合视频在线看| 国产aⅴ无码专区亚洲av| 亚欧乱色国产精品免费视频| 亚洲一级特黄大片无码毛片| 一级做a免费视频观看网站| 国产偷国产偷亚洲高清日韩| 精选影视免费在线 | 国产AV无码专区亚洲A∨毛片| 无码专区AAAAAA免费视频| 91亚洲导航深夜福利| 免费精品国偷自产在线在线 | 亚洲欧洲日本在线观看| 四虎成人免费观看在线网址| 亚洲AV无码一区二区三区电影| 国产午夜影视大全免费观看| 特黄特色大片免费| 亚洲精品午夜国产VA久久成人| 久久不见久久见免费视频7| 亚洲人xxx日本人18| 日韩精品成人亚洲专区| 久久精品成人免费网站| 亚洲综合激情六月婷婷在线观看| 成人免费毛片视频| a一级毛片免费高清在线| 亚洲综合小说久久另类区| 日本免费网站在线观看| 中文字幕不卡高清免费| 亚洲国产精品网站久久| 免费一级做a爰片久久毛片潮喷| 91国内免费在线视频| 亚洲乱码一二三四区麻豆| 亚洲国产av无码精品| 69式互添免费视频| 又大又硬又粗又黄的视频免费看 | 国产精品免费看久久久久| a级在线观看免费| 亚洲一卡2卡3卡4卡5卡6卡| 在线日韩日本国产亚洲| 91情侣在线精品国产免费| 亚洲精品偷拍视频免费观看|