XDR数据类型

1、基本数据类型

和 C 语言基本数据类型相似,包括 int、 unsigned int、enum、bool、long、float、double等,使用示例如下:

data.x  文件:

enum colors {RED = 2, YELLO = 3, BLUE = 5};

struct data {
	int a;
	unsigned int b;
	enum colors c;
	bool d;
	long e;
	float f;
	double g;
};

rpcgen 生成的 data.h 文件:

enum colors {
	RED = 2,
	YELLO = 3,
	BLUE = 5,
};
typedef enum colors colors;

struct data {
	int a;
	u_int b;
	enum colors c;
	bool_t d;
	long e;
	float f;
	double g;
};
typedef struct data data;

2、opaque 数据

分为定长 opaque 数据、变长 opaque 数据,有点像 C 语言里面的字符数组,使用示例如下:

data.x 文件:

struct data {
	opaque a[128];    // 定长 opaque 数据
	opaque b<256>;    // 变长 opaque 数据
	opaque c<>;        // 变长 opaque 数据
};

rpcgen 生成的 data.h 文件:

struct data {
	char a[128];
	struct {
		u_int b_len;
		char *b_val;
	} b;
	struct {
		u_int c_len;
		char *c_val;
	} c;
};
typedef struct data data;

对于变长 opaque 数据而言,数据长度编码在数据块的最前面,占 4 个字节。变长 opaque 数据的最大长度由 “opaque data<m>” 中的 m 限定,若没有指定 m,则默认为 (2 ^ 32 - 1)。

3、string 

类似于 C 语言中的字符串,和上面的 opaque 数据类似,同样有定长和变长的两个版本,使用示例如下:

data.x 文件:

struct data {
	string a<256>;
	string b<>;
};

rpcgen 生成的 data.h 文件:

struct data {
	char *a;
	char *b;
};
typedef struct data data;

与变长 opaque 数据类似,string 的长度由 "string data<m>" 中的 m 限定,若没有指定 m,则默认为 (2 ^ 32 - 1)。

3、数组

同样类似于 C 语言中的数组,支持定长和变长数组,使用示例如下:

data.x 文件:

struct data {
	int a[128];    // 定长数组
	int b<256>;    // 变长数组
	int c<>;        // 变长数组
};

rpcgen 生成的 data.h 文件:

struct data {
    int a[128];
    struct {
        u_int b_len;
        int *b_val;
    } b;
    struct {
        u_int c_len;
        int *c_val;
    } c;
};
typedef struct data data;

4、结构体

和 C 语言中的结构体类似,上述示例中一直在用结构体来演示其他数据类型,就不介绍了。

5、discriminated union

这个类型和 C 语言中的 union 有点像,但表现形式差别较大,仿佛是 C 语言中的一条 switch case 语句,但最终生成的类型还是和 union 相关,使用示例如下:

data.x 文件:

union union_type switch (int code) {
	case 1:
		int a;
	case 2:
		long b;
	case 3:
		char *c;
	default:
		void;
};

rpcgen 生成的 data.h 文件:

struct union_type {
    int code;
    union {
        int a;
        long b;
        char *c;
    } union_type_u;
};
typedef struct union_type union_type;

6、常量

和 C 语言中的常量类似,使用示例如下:

data. x 文件:

const month = 12;

rpcgen 生成的 data.h 文件:

#define month 12

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值