博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ruby处理二进制
阅读量:6883 次
发布时间:2019-06-27

本文共 756 字,大约阅读时间需要 2 分钟。

  分析二进制协议或者存取二进制文件是个很常见的需求,Ruby的IO提供了对二进制的读操作,但是写入却只提供字符。并且读的操作也比较笨拙,例如,在c里面的话,我们一般是定义个struct,然后:
fread(record, sizeof(record), 1, stream);
在java里,也是比较容易,特别是nio引入了ByteBuffer之后就更方便了。Ruby的话,我得自己确定读多少个字节,并自己“组装”成原始数据,这显然太麻烦了,幸好,我们有 :)
    到 下载,解压之后参照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写入文件,内部自动帮你处理转换细节。

文章转自庄周梦蝶  ,原文发布时间 2008-01-25

转载地址:http://khibl.baihongyu.com/

你可能感兴趣的文章
[Vue CLI 3] 配置解析之 css.extract
查看>>
Linux——信息采集(三)dmitry、路由跟踪命令tracerouter
查看>>
提取ipa里面的资源图片 png
查看>>
wxpython ItemContainer
查看>>
工作中 Oracle 常用数据字典集锦
查看>>
SFB 项目经验-12-为某上市企业的Skype for Business购买Godday证书
查看>>
[C#基础知识]专题十三:全面解析对象集合初始化器、匿名类型和隐式类型
查看>>
大数据虚拟化零起点-2基础运维第一步-环境规划和准备
查看>>
Skype for Business Server 2015-04-前端服务器-3-安装-管理工具
查看>>
docker入门指南(转载)
查看>>
Java RGB数组图像合成 ImageCombining (整理)
查看>>
第八届河南省赛F.Distribution(水题)
查看>>
Android 下拉刷新上拉载入效果功能
查看>>
第九篇 :微信公众平台开发实战Java版之如何实现自定义分享内容
查看>>
SDL2源码分析1:初始化(SDL_Init())
查看>>
swift通过摄像头读取每一帧的图片,并且做识别做人脸识别
查看>>
你对自己的定位是什么,就能成为什么样的人(转)
查看>>
全文检索引擎Solr系列——整合中文分词组件IKAnalyzer
查看>>
学习mongo系列(二) 新建数据库,collection ,insert(),save()
查看>>
chrome浏览器下用jQuery的load函数来跨域加载页面,响应状态status为(canceled)是什么情况? JSON和JSONP,也许你会豁然开朗,含jQuery用例...
查看>>