名稱: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<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
<b>說明:使用-f</b><b>選項輸出浮點數。</b>
本文轉自hipercomer 51CTO部落格,原文連結:http://blog.51cto.com/hipercomer/824774