技术学习

Bytefield——协议图表生成神器

ByteFeild简介

在二进制协议时,图表是比文字描述更加方便理解查看的形式。而话协议解析图表,不可避免的成为了开发者的一项技能。
而你还在使用画图、PPT、excel来绘制协议图表嘛?

隆重介绍协议图表绘制神器 —— ByteField!!!

Bytefield——协议图表生成神器

使用方法

ByteField是基于Latex的一个扩展包,在VSCode中,安装 Markdown Kroki 插件,就可以很方便的借助预览进行编辑。

同时,也可以在 https://kroki.io/#try 里输入代码,来获取SVG文件,嵌入到网页中。

语法

ByteField的语法是基于 clojure 这个语言的。我们并不需要学习这门语言,直接借助一些示例,就可以上手来进行绘制了。

定义一个格子:

(draw-box 23)

Bytefield——协议图表生成神器

一版来说我们希望可以有个表头,方便我们尽快找到某个字段的偏移量和长度:

(draw-column-headers)
;________________内容区域___________________
(draw-box 0)
(draw-bottom)

Bytefield——协议图表生成神器

默认是 0-f的16进制表头,如果想要自定义的话,也是可以的:

(def column-labels ["0" "1" "2" "3" "222" "5" "6" "7" "8" "YY"]); 头部序列
(def boxes-per-row 10)
(draw-column-headers)
;________________内容区域___________________
(draw-box 0)

Bytefield——协议图表生成神器

增大格子的宽度,指定它所占的字节数

(draw-column-headers)
;________________内容区域___________________
(draw-box 0xFF {:span 2})
(draw-box 0xFF {:span 3})
(draw-bottom)

Bytefield——协议图表生成神器

除了数字,也可以设置格子的内容为文本:

(draw-column-headers)
(draw-column-headers)
;________________内容区域___________________
(draw-box 0xFF {:span 4})
(draw-box (text "ffCCaa11" :hex ) {:span 4} ) ; 支持不同的字体
(draw-box (text "NUL" :plain) {:span 4}) ; 支持不同的字体
(draw-box (text "a+b" :math) {:span 4}) ; 支持不同的字体
(draw-box (text "log" :math [:sub "2" ] "A" [:super "2" ]) {:span 4}); 下标上标
(draw-box "NUL" {:span 4})
(draw-box "" {:span 4}) 
(draw-bottom)

Bytefield——协议图表生成神器

(defattrs :bg-green {:fill "#a0ffa0"})
(defattrs :bg-yellow {:fill "#ffffa0"})
(defattrs :bg-pink {:fill "#ffb0a0"})
(defattrs :bg-cyan {:fill "#a0fafa"})
(defattrs :bg-purple {:fill "#e4b5f7"})
(def svg-attrs {:style "background-color:white"});设置表格背景
(draw-column-headers)
;________________内容区域___________________
(draw-box 0x11 :bg-green )
(draw-box 0x11 :bg-pink )
(draw-box 0x11 :bg-yellow )
(draw-box 0x11 :bg-purple )
(draw-box 0)
(draw-bottom)

Bytefield——协议图表生成神器

还有很多骚操作,可以看官方文档:https://bytefield-svg.deepsymmetry.org/bytefield-svg/1.11.0/intro.html

留言

您的电子邮箱地址不会被公开。 必填项已用*标注