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

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

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

    莊周夢蝶

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

    Ruby處理二進(jìn)制

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

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

    在java里,也是比較容易,特別是nio引入了ByteBuffer之后就更方便了。Ruby的話,我得自己確定讀多少個(gè)字節(jié),并自己“組裝”成原始數(shù)據(jù),這顯然太麻煩了,幸好,我們有bit-struct :)
        到主頁下載,解壓之后參照README安裝下就OK了。使用的話,也是先定義結(jié)構(gòu),然后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用于聲明一個(gè)嵌套結(jié)構(gòu),例如:
    class Sub < BitStruct
        unsigned :x,    
    8
     end

    class A < BitStruct
        nest    :n,  Sub
    end

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

    如果你看下源碼的話,會(huì)發(fā)現(xiàn)BitStruct繼承String類,因此IO可以直接將BitStruct寫入文件,內(nèi)部自動(dòng)幫你處理轉(zhuǎn)換細(xì)節(jié)。

    主站蜘蛛池模板: 无码人妻丰满熟妇区免费| 免费无码国产V片在线观看| 免费人成激情视频在线观看冫| 国产成人免费a在线视频色戒| 亚洲色一区二区三区四区 | 亚洲一区精彩视频| 四虎在线免费视频| 亚洲国产人成在线观看| 天天影视色香欲综合免费| 亚洲娇小性xxxx| 巨胸喷奶水视频www网免费| 亚洲va中文字幕| 青青青国产色视频在线观看国产亚洲欧洲国产综合 | 免费做爰猛烈吃奶摸视频在线观看| 亚洲人色大成年网站在线观看| 1024免费福利永久观看网站| 亚洲xxxxxx| 国产成人3p视频免费观看| 精品一区二区三区免费观看| 久久精品国产亚洲夜色AV网站| 亚洲视频在线免费播放| 中文字幕在线日亚洲9| 国产又粗又猛又爽又黄的免费视频| 特级无码毛片免费视频| 亚洲精品国产精品乱码视色| 最近中文字幕大全中文字幕免费| 久久精品国产亚洲av麻豆图片| 午夜免费福利在线观看| 国产精品美女久久久免费| 亚洲视频2020| 成年女人男人免费视频播放| 五月婷婷免费视频| 亚洲AV日韩精品久久久久久久 | 亚洲人成人77777网站不卡| 四虎影视在线永久免费看黄| 中文字幕乱码系列免费| 亚洲精品美女久久久久9999| 国产一区二区三区免费视频| 无码国产精品一区二区免费模式 | 妻子5免费完整高清电视| 日日狠狠久久偷偷色综合免费 |