RPC外部資料表示 XDR

2022-05-02 21:54:10 字數 1330 閱讀 6411

rpc

的xdr

(外部資料表示)是為了編碼(解碼)

c語言定義的資料,從而使得

rpc傳輸的資料平台無關性。

xdr對

c語言常見的型別編碼規則在之前已經說過了,參見

,對於說明書

test.x

定義的定義,最終會被

rpcgen

翻譯成支援

c語言支援的型別定義,之後

test.x

就沒有任何作用了。

如在

test.x

中定義

struct data

;

對應的

test.h

struct data vopaque_arg;

struct vlong_arg;

};typedef struct data data;

從test.h

中可以看到,對於

opaque, char

的定義,在

c語言中對對應

char

,而根據

xdr的規則,

opaque

編碼為固定長度

n個位元組的序列(會被補全至

4位元組的倍數);而

char

會被編碼成固定長度n個

4位元組元素序列。怎麼這裡都是

char

???別急,編碼規則在標頭檔案中是沒有顯現出來的,根據說明書中定義,

rpcgen

會生成相應的方法對各種資料進行編碼,而這些編碼方法均在

test_xdr.c中。 

再看

test_xdr.c

bool_t

xdr_data (xdr *xdrs, data *objp)

從test_xdr.c

中可以看出,

opaque

,char

是分別是通過

xdr_opaque,xdr_vector

編碼(需要傳遞各個元素編碼的方法,如此例中的

xdr_char()

),故在

xdr表示中

opaque

,char

是不同的。

對於opaque<>

,datatype<>

都是通過

xdr_array

實現的,同樣根據傳遞過來的編碼方法

xdr_opaque, xdr_long

,它們被編碼成不同的格式。

BCD資料表示

2.13 bcd資料表示 雖然整數和浮點格式已經可以滿足一般程式的資料表示需求,但是在一些特殊的情況下,其他的數字表示方式更加方便一些。在本節中,我們將對二進位制編碼的十進位制 bcd 格式進行討論,因為80x86 cpu為這種資料表示方式提供了少量的硬體支援。bcd數值是由一些半位元組組成的序列,...

Struts Hibernate資料表示

在 struts hibernate 這種結構中,是不應該把hibernate產生的po直接傳遞給jsp的,不管他是iterator,還是list,這是乙個設計錯誤。我來談談在j2ee架構中各層的資料表示方法 web層的資料表示是formbean,資料 於html form post 業務層的資料表...

資料表示 機器數

各種數值在計算機中的表示形式稱為機器數。特點是採用二進位制計數制,數的符號使用0和 1表示,小數點則隱含表示不佔位。無符號數 表示的是正數,機器中沒有符號未。帶符號數 機器數的最高位表示正負的符號位,其餘為表示數值。純整數 約定小數點的位置在機器數的最低數值位之後。純小數 約定小數的位置在機器數的最...