天天看點

od指令

名稱:od

作用:格式化輸出檔案中的資料

提要:

         od [OPTION]... [FILE]...

         od [-abcdfilosx]... [FILE] [[+]OFFSET[.][b]]

     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</b><b>檔案</b>

<b></b>

<b> </b>

[lichao@sg01 ~]$ od -b tmp

0000000 141 142 143 144 145 146 040 147 012

0000011

<b>說明:使用單位元組八進制解釋進行輸出,注意左側的預設位址格式為八位元組</b>

[lichao@sg01 ~]$ od -c tmp

0000000   a   b   c   d   e   f       g  \n

<b>說明:使用ASCII</b><b>碼進行輸出,注意其中包括轉義字元</b>

[lichao@sg01 ~]$ od -t d1 tmp

0000000   97   98   99  100  101  102   32  103   10

<b>說明:使用單位元組十進制進行解釋</b>

[lichao@sg01 ~]$ od -A d -c tmp

0000009

<b>說明:設定位址格式為十進制。</b>

[lichao@sg01 ~]$ od -A x -c tmp

000000   a   b   c   d   e   f       g  \n

<b>說明:設定位址格式為十六進制</b>

[lichao@sg01 ~]$ od -j 2 -c tmp

0000002   c   d   e   f       g  \n

<b>說明:跳過開始的兩個位元組</b>

[lichao@sg01 ~]$ od -N 2 -j 2 -c tmp

0000002   c   d

0000004

<b>說明:跳過開始的兩個位元組,并且僅輸出兩個位元組</b>

[lichao@sg01 ~]$ od -w1 -c tmp

0000000   a

0000001   b

0000002   c

0000003   d

0000004   e

0000005   f

0000006   

0000007   g

0000010  \n

<b>說明:每行僅輸出1</b><b>個位元組</b>

[lichao@sg01 ~]$ od -w2 -c tmp

0000000   a   b

0000004   e   f

0000006       g

<b>說明:每行輸出兩個位元組</b>

[lichao@sg01 ~]$ od -w3 -b tmp

0000000 141 142 143

0000003 144 145 146

0000006 040 147 012

<b>說明:每行輸出3</b><b>個位元組,并使用八進制單位元組進行解釋</b>

下面是一個單精度浮點數的實驗,其餘的類型與之類似:

先寫一段C語言的代碼:

#include&lt;stdio.h&gt; 

#include&lt;stdlib.h&gt; 

#include&lt;time.h&gt; 

#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&lt;N;i++) 

                fNum = rand() % N; 

                fNum = PI * fNum / N; 

                fwrite(&amp;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

<b>說明:使用-f</b><b>選項輸出浮點數。</b>

本文轉自hipercomer 51CTO部落格,原文連結:http://blog.51cto.com/hipercomer/824774

上一篇: /dev/tty node
下一篇: set集合

繼續閱讀