注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

dp: 生活的脚步,进步的点滴...

Cam、DSP、FPGA、PM、Life、More ...

 
 
 

日志

 
 

vim之Bin2Hex:二进制与十六进制转换  

2012-02-02 14:51:38|  分类: 专业 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
考验DP的时刻到了,VIM练兵千日,用在一时:
若想把二进制文件:
11111111111111111011110110110011111111111111111100111011000000000000000000000000000000100000000000000000000000000110100000000101
10000100000010010100100011111100001111110011110001000110000000000000000000000000101110001110000000000001010011010000000000000000
转换为:
FF FF BD B3 FF FF 3B 00 00 00 02 00 00 00 68 05
84 09 48 FC 3F 3C 46 00 00 00 B8 E0 01 4D 00 00
怎么办?

Vim不提供二进制与十六进制转换,得费点儿劲:
法一:
1.把二进制串分割为4个二进制为单位;
2.替换
%s/1111/F/ge |%s/1110/E/ge |%s/1101/D/ge |%s/1100/C/ge |%s/1011/B/ge |%s/1010/A/ge |%s/1001/9/ge |%s/1000/8/ge |%s/0111/7/ge |%s/0110/6/ge |%s/0101/5/ge |%s/0100/4/ge |%s/0011/3/ge |%s/0010/2/ge |%s/0001/1/ge |%s/0000/0/g
法二:
1.复制Bianry.vim插件到plugin文件下,如C:\Program Files\Vim\vim73\plugin\
先把连续4个二进制数转为一个16进制数
%s/\d\{4\}/\=Bin2Hex(submatch(0))/g
然后再以2个十六进制数为一组分离
%s/\w\{2\}/& /g
完整完毕如下:
FF FF BD B3 FF FF 3B 00 00 00 02 00 00 00 68 05
84 09 48 FC 3F 3C 46 00 00 00 B8 E0 01 4D 00 00

附:十进制与十六进制相互转换
十进制转换为十六进制可以用下面的方式实现:
:%s/\d\+/\=printf(“%X”, submatch(0))/g
但是这个对于负数,则无法识别。
此外,也无法将十六进制转换为十进制

:%s/-\(\d\+\)/\=printf("%X", 65536-submatch(1))/g
这个可以替换负数。65536是取16位表示。
从十六转到十进制,比较难。

十六进制转十进制:
:s/0x\(\x\+\)/\=str2nr(submatch(1), 16)
  评论这张
 
阅读(819)| 评论(0)
推荐

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016