文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>bash暗黑破坏神(2)

bash暗黑破坏神(2)

时间:2005-09-03  来源:slimzhao

bash中处理二进制数据.

1. 不要用shell变量来保存二进制数据, 也不要用函数参数来作传递, 至今我还没看到严肃的声明说可以这样

2. xxd 是个名不见经传的工具, 但比它更闻名一些的od却不能把字符描述的进六进制反转成二进制数据.
xxd 来自vim安装包, 我在windows下安装完gvim也有一个伴随的xxd, 当你想生成一个数据量不大, 但内容却希望
随心所欲的时候, 它显得尤其有用
echo 410000000000000000000000 | xxd -r -ps > tmp.dat
你的tmp.dat第一个字符将会是A, 但其后的就都是真正的ASCII为0的字节.

3. tr 是为数不多的不跟文件名作参数的命令, 它只遵循一个原则, 从stdin读, 向stdout写.

4. 如何在用grep 取到目标串时获知它在文件中的准确偏移, 麻烦:
grep -ab regexp filename.txt
输出的格式是
123:pre - regexp - post
这个123只是这一行在文件中的偏移, 不是被找到的那个regexp, 你还得把这一行存起来, 想办法把regexp前面的部分长度求出来.
加上去. 总之是麻烦.

5. 如何改变某个文件中的其中一个字节
找到偏移处, 用 echo 03 | xxd -r -ps > tmp.dat 把要写的字节存入一个文件.
dd if=tmp.dat of=file.dat bs=1c seek=1000 conv=notrunc
最后一个参数是要命的, 否则你的输出文件 file.dat将会被截为0先.

6. 在DOS下编程注意什么
binmode(stdin), 不管是在perl中, C语言中都要注意这一点. 它的文件是区分文本方式和二进制方式的.
但运行了bash.exe作为命令解释器之后约定就跟UNIX是一样的了.
在DOS下把多个文件合并成一个的办法是:
copy /b file1+file2+file3 all_in_one
在UNIX下是
cat file1 file 2 file3 > all_in_one

7. 小心很多命令, 它们不是被设计成二进制数据的.

8. printf 可以把一个整数显示出来, 但我如何把它作为一个native的int存储在INTEL体系结构的机器中?
printf "%08x" 1234 | rev | sed 's#(.)(.)#21#g' | xxd -r -ps > tmp.dat

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载