您的位置:首页 > 其它

od命令

2012-04-03 20:16 441 查看
名称:od

作用:格式化输出文件中的数据
提要:
od [OPTION]... [FILE]...
od [-abcdfilosx]... [FILE] [[+]OFFSET[.]]
od --traditional [OPTION]... [FILE] [[+]OFFSET[.][b] [+][LABEL][.][b]]
说明:
常见的文件为文本文件和二进制文件。此命令主要用来查看保存在二进制文件中的值。比如,程序可能输出大量的数据记录,每个数据是一个单精度浮点数。这些数据记录存放在一个文件中,如果想查看下这个数据,这时候od命令就派上用场了。在我看来,od命令主要用来格式化输出文件数据,即对文件中的数据进行无二义性的解释。不管是IEEE754格式的浮点数还是ASCII码,od命令都能按照需求输出他们的值。
如果没有指定文件名,或者文件名为“-”,则从标准输入读入数据

-A:指定地址基数,od命令的输出最左侧的1列为偏移量。默认的偏移量使用8进制,可以使用-A进行修改。
格式为:-A 参数.可以使用的参数有:d:十进制;o:八进制;x:十六进制;n不显示偏移量这一列。

-j:文件打开时,跳过的字节数量。
格式为:-j BYTES.BYTES是一个数值,用0开头表示8进制,用0x开头表示16进制,用b作为后缀表示1个字节,用k作为后缀表示1024个字节,用m作为后缀表示1048576个字节。

-N:用于限制输出的字节的数量
格式为:-N BYTES.BYTES的格式同上。

-S:用于指定输出的串占多少个图形字符的位置
格式为:-S BYTES.

-t:选择输出格式。
格式为:-t [acdfoux][size].
a:每个ASCII码对应的名字。
b:用八进制字节表示的字符对应的ASCII码值
d:有符号数值,SIZE个字节
f:浮点数,SIZE个字节
o:八进制数,SIZE个字节
u:无符号数值,SIZE个字节
x:十六进制数,size个字节
注意:这里的SIZE是一个数值或者是一个字母。字母的范围为:[CSILFD]。对于非f类型的,一般选择CSIL.其中C表示sizeof(char),S表示sizeof(short),I表示sizeof(int),L表示sizeof(long).如果类型为f,sizeof可以是F或者是D,分别表示sizeof(float)或者sizeof(double).
可以使用传统的格式:分别为:
-a:等价于 -t a.表示ASCII码的名字
-b:等价于-t o1,选择单字节,并且按照3个数值位的八进制数进行解释
-c:等价于-t c,选择ASCII码字符或者是转义字符
-d:等价于-t u2:选择无符号2字节单位
-f:等价于-t fF,选择单精度浮点数
-i:等价于-t dI,选择十进制整型
-l:等价于-t dL,选择十进制长整型
-o:等价于-t o2,选择两个字节的单元并按照八进制进行解释
-s:等价于-t d2,选择两字节单元并按照十进制解释
-x:等价于-t x2,选择两个字节单元,并作十六进制解释

-v:不用*代替重复的输出

-w:用于设置每行的宽度,即每行上输出的字节数
格式为:-w BYTES

举例说明如下:
[lichao@sg01 ~]$ echo abcdef g > tmp
[lichao@sg01 ~]$ cat tmp
abcdef g
[b]说明:先准备一个tmp
文件

[lichao@sg01 ~]$ od -b tmp
0000000 141 142 143 144 145 146 040 147 012
0000011
说明:使用单字节八进制解释进行输出,注意左侧的默认地址格式为八字节

[lichao@sg01 ~]$ od -c tmp
0000000 a b c d e f g \n
0000011
说明:使用ASCII码进行输出,注意其中包括转义字符

[lichao@sg01 ~]$ od -t d1 tmp
0000000 97 98 99 100 101 102 32 103 10
0000011
说明:使用单字节十进制进行解释

[lichao@sg01 ~]$ od -A d -c tmp
0000000 a b c d e f g \n
0000009
说明:设置地址格式为十进制。

[lichao@sg01 ~]$ od -A x -c tmp
000000 a b c d e f g \n
000009
说明:设置地址格式为十六进制

[lichao@sg01 ~]$ od -j 2 -c tmp
0000002 c d e f g \n
0000011
说明:跳过开始的两个字节

[lichao@sg01 ~]$ od -N 2 -j 2 -c tmp
0000002 c d
0000004
说明:跳过开始的两个字节,并且仅输出两个字节

[lichao@sg01 ~]$ od -w1 -c tmp
0000000 a
0000001 b
0000002 c
0000003 d
0000004 e
0000005 f
0000006
0000007 g
0000010 \n
0000011
说明:每行仅输出1个字节

[lichao@sg01 ~]$ od -w2 -c tmp
0000000 a b
0000002 c d
0000004 e f
0000006 g
0000010 \n
0000011
说明:每行输出两个字节

[lichao@sg01 ~]$ od -w3 -b tmp
0000000 141 142 143
0000003 144 145 146
0000006 040 147 012
0000011
说明:每行输出3个字节,并使用八进制单字节进行解释

下面是一个单精度浮点数的实验,其余的类型与之类似:
先写一段C语言的代码:

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

#define N 100

#define PI 3.1415

int main()

{

FILE * fp;

int i=0;

float fNum=0.0;

if( NULL == (fp = fopen("tmp","wb+")))

{

printf("file open error.");

exit(-1);

}

srand((unsigned int)time(NULL));

for(i=0;i<N;i++)

{

fNum = rand() % N;

fNum = PI * fNum / N;

fwrite(&fNum,sizeof(float),1,fp);

}

fclose(fp);

}

执行之后,将生成一个tmp文件,文件中有100个大小在0~PI之间的浮点数。
[lichao@sg01 random]$ od -t fF tmp
0000000 5.654700e-01 2.387540e+00 2.199050e+00 1.633580e+00
0000020 2.199050e-01 2.481785e+00 8.167900e-01 2.576030e+00
0000040 2.827350e-01 9.424500e-01 8.796200e-01 1.130940e+00
0000060 2.638860e+00 1.193770e+00 2.733105e+00 1.162355e+00
0000100 2.167635e+00 2.670275e+00 5.654700e-01 2.261880e+00
0000120 1.507920e+00 2.450370e+00 2.607445e+00 6.597150e-01
0000140 1.350845e+00 7.853750e-01 2.010560e+00 2.858765e+00
0000160 1.916315e+00 2.387540e+00 7.225450e-01 9.738650e-01
0000200 1.256600e-01 1.445090e+00 2.638860e+00 3.455650e-01
0000220 7.853750e-01 1.947730e+00 1.413675e+00 2.701690e+00
0000240 2.890180e+00 7.853750e-01 2.356125e+00 2.387540e+00
0000260 5.026400e-01 4.398100e-01 2.073390e+00 2.670275e+00
0000300 3.110085e+00 1.130940e+00 2.827350e-01 1.507920e+00
0000320 2.104805e+00 2.890180e+00 6.597150e-01 3.141500e-01
0000340 2.199050e+00 1.193770e+00 3.141500e-02 9.738650e-01
0000360 4.398100e-01 2.387540e+00 1.979145e+00 2.199050e+00
0000400 2.324710e+00 1.476505e+00 2.544615e+00 1.633580e+00
0000420 1.916315e+00 2.450370e+00 2.827350e+00 1.664995e+00
0000440 1.256600e-01 2.041975e+00 2.544615e+00 6.283000e-01
0000460 2.481785e+00 1.476505e+00 1.570750e-01 9.738650e-01
0000500 2.638860e+00 2.073390e+00 2.481785e+00 1.602165e+00
0000520 1.853485e+00 1.633580e+00 4.083950e-01 2.544615e+00
0000540 2.827350e+00 2.073390e+00 3.769800e-01 1.759240e+00
0000560 1.319430e+00 2.356125e+00 8.167900e-01 2.167635e+00
0000600 2.324710e+00 1.853485e+00 6.597150e-01 1.099525e+00
说明:使用-f选项输出浮点数。
本文出自 “相信并热爱着” 博客,转载请与作者联系!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: