C语言函数大全-- x 开头的函数(2)

news/2024/11/17 18:36:47/

C语言函数大全

本篇介绍C语言函数大全-- x 开头的函数

1. xdr_char

1.1 函数说明

函数声明函数功能
bool_t xdr_char(XDR *xdrs, char *cp);用于将一个 char 类型的数据编码为 XDR 流或从 XDR 流中解码出一个 char 类型的数据

参数:

  • xdrs : 指向要编码或解码数据的 XDR 结构体的指针
  • cp : 指向要编码或解码的 char 类型数据的指针

返回值:

  • 如果编码或解码成功,则返回值为 TRUE
  • 否则返回值为 FALSE

1.2 演示示例

#include <stdio.h>
#include <rpc/xdr.h>int main() 
{// 创建 XDR 流XDR xdr;xdrmem_create(&xdr, NULL, 0, XDR_ENCODE); // 写入 char 值char c = 'A';if (!xdr_char(&xdr, &c)) {printf("写入失败");return 1;}// 重置 XDR 流为解码模式xdrrec_endofrecord(&xdr, true);// 从流中读取 char 值char result;if (!xdr_char(&xdr, &result)) {printf("读取失败");return 1;}// 输出结果printf("读取结果:%c\n", result);return 0;
}

在上面的示例代码中,

  • 首先,我们调用 xdrmem_create() 函数创建了一个 XDR 流;
  • 然后,使用 xdr_char() 函数将 char 值写入流中;
  • 接着,通过调用 xdrrec_endofrecord() 函数将流重置为解码模式;
  • 再接着,使用 xdr_char() 函数从流中读取 char 值;
  • 最后,输出从流中读取的 char 值。

2. xdr_callmsg

2.1 函数说明

函数声明函数功能
bool_t xdr_callmsg(XDR *xdrs, struct rpc_msg *cmsg);用于将表示 RPC 消息的结构体编码为 XDR 流或从 XDR 流中解码出一个表示 RPC 消息的结构体

参数:

  • xdrs : 指向要编码或解码数据的 XDR 结构体的指针
  • cmsg : 指向表示 RPC 消息的结构体的指针

返回值:

  • 如果编码或解码成功,则返回值为 TRUE
  • 否则返回值为 FALSE

2.2 演示示例

#include <stdio.h>
#include <rpc/xdr.h>
#include <rpc/rpc.h>int main() 
{// 创建一个表示 RPC 消息的结构体struct rpc_msg cmsg = {.rm_xid = 1234567890,.rm_direction = CALL,.rm_call.cb_rpcvers = 2,.rm_call.cb_prog = 100001,.rm_call.cb_vers = 1,.rm_call.cb_proc = 4};// 创建 XDR 流XDR xdr;char buffer[1024];xdrmem_create(&xdr, buffer, sizeof(buffer), XDR_ENCODE);// 将消息编码到 XDR 流中if (!xdr_callmsg(&xdr, &cmsg)) {printf("编码失败");return 1;}// 重置 XDR 流为解码模式xdrrec_endofrecord(&xdr, true);// 从流中读取消息struct rpc_msg result;if (!xdr_callmsg(&xdr, &result)) {printf("解码失败");return 1;}// 输出结果printf("读取结果:\n");printf("  XID: %u\n", result.rm_xid);printf("  Direction: %d\n", result.rm_direction);printf("  RPC Version: %u\n", result.rm_call.cb_rpcvers);printf("  Program: %u\n", result.rm_call.cb_prog);printf("  Program Version: %u\n", result.rm_call.cb_vers);printf("  Procedure: %u\n", result.rm_call.cb_proc);return 0;
}

在上面的这个示例中,

  • 首先,我们定义了一个表示 RPC 消息的结构体 cmsg,其中包含 消息的 XID方向RPC 版本号程序号程序版本号过程号 等字段。
  • 接着,使用 xdrmem_create() 函数创建一个内存 XDR 流,用于将消息编码为 XDR 格式;
  • 然后,调用 xdr_callmsg() 函数将消息编码到 XDR 流中。如果编码成功,则返回值为 TRUE,否则返回值为 FALSE
  • 再接着,调用 xdrrec_endofrecord() 函数将流重置为解码模式,以便从流中读取已编码的消息。
  • 再然后,再次调用 xdr_callmsg() 函数从流中解码出一个表示 RPC 消息的结构体,并将其保存在 result 变量中。
  • 最后,使用 printf() 函数输出解码后的消息字段。

3. xdr_double

3.1 函数说明

函数声明函数功能
bool_t xdr_authunix_parms(XDR *xdrs, struct authunix_parms *objp);用于将 double 类型数据编码为 XDR 流或从 XDR 流中解码出一个 double 类型数据

参数:

  • xdrs : 指向要编码或解码数据的 XDR 结构体的指针
  • dp : 指向要编码或解码的 double 类型数据的指针

返回值:

  • 如果编码或解码成功,则返回值为 TRUE
  • 否则返回值为 FALSE

3.2 演示示例

#include <stdio.h>
#include <rpc/xdr.h>int main() 
{// 创建 XDR 流XDR xdr;char buffer[1024];xdrmem_create(&xdr, buffer, sizeof(buffer), XDR_ENCODE);// 写入 double 值double d = 3.1415926;if (!xdr_double(&xdr, &d)) {printf("写入失败");return 1;}// 重置 XDR 流为解码模式xdrrec_endofrecord(&xdr, true);// 从流中读取 double 值double result;if (!xdr_double(&xdr, &result)) {printf("读取失败");return 1;}// 输出结果printf("读取结果:%f\n", result);return 0;
}

在上面的示例代码中,

  • 首先,我们调用 xdrmem_create() 函数创建了一个 XDR 流;
  • 然后,使用 xdr_double() 函数将 double 值写入流中;
  • 接着,通过调用 xdrrec_endofrecord() 函数将流重置为解码模式;
  • 再接着,使用 xdr_double() 函数从流中读取 double 值;
  • 最后,输出从流中读取的 double 值。

注意: 由于不同的系统架构和字节序可能会影响浮点数的表示方式,因此在使用 xdr_double 函数时必须格外小心。建议在使用此函数时仅在相同的系统和语言之间进行传输。

4. xdr_enum

4.1 函数说明

函数声明函数功能
bool_t xdr_enum(XDR *xdrs, enum_t *ep);用于将 枚举类型数据编码为 XDR 流或从 XDR 流中解码出枚举类型数据

参数:

  • xdrs : 指向要编码或解码数据的 XDR 结构体的指针
  • ep : 指向要编码或解码的枚举类型数据的指针

返回值:

  • 如果编码或解码成功,则返回值为 TRUE
  • 否则返回值为 FALSE

4.2 演示示例

#include <stdio.h>
#include <rpc/xdr.h>enum Color 
{RED,GREEN,BLUE
};int main() 
{// 创建 XDR 流XDR xdr;char buffer[1024];xdrmem_create(&xdr, buffer, sizeof(buffer), XDR_ENCODE); // 写入枚举类型值enum Color c = GREEN;if (!xdr_enum(&xdr, (enum_t *)&c)) {printf("写入失败");return 1;}// 重置 XDR 流为解码模式xdrrec_endofrecord(&xdr, true);// 从流中读取枚举类型值enum Color result;if (!xdr_enum(&xdr, (enum_t *)&result)) {printf("读取失败");return 1;}// 输出结果printf("读取结果:%d\n", result);return 0;
}

在上面的这个示例程序中,

  • 首先,我们调用 xdrmem_create() 函数创建了一个 XDR 流;
  • 然后,使用 xdr_enum() 函数将 枚举类型值 GREEN 写入流中;
  • 接着,调用 xdrrec_endofrecord() 函数将流重置为解码模式;
  • 再接着,使用 xdr_enum() 函数从流中读取枚举类型值;
  • 最后,调用 printf() 函数输出从流中读取的布尔值。

5. xdr_float

5.1 函数说明

函数声明函数功能
bool_t xdr_float(XDR *xdrs, float *fp);用于将 float 类型数据编码为 XDR 流或从 XDR 流中解码出一个 float 类型数据

参数:

  • xdrs : 指向要编码或解码数据的 XDR 结构体的指针
  • fp : 指向要编码或解码的 float 类型数据的指针

返回值:

  • 如果编码或解码成功,则返回值为 TRUE
  • 否则返回值为 FALSE

5.2 演示示例

#include <stdio.h>
#include <rpc/xdr.h>int main() 
{// 创建 XDR 流XDR xdr;char buffer[1024];xdrmem_create(&xdr, buffer, sizeof(buffer), XDR_ENCODE);// 写入 float 值float f = 3.14;if (!xdr_float(&xdr, &f)) {printf("写入失败");return 1;}// 重置 XDR 流为解码模式xdrrec_endofrecord(&xdr, true);// 从流中读取 float 值float result;if (!xdr_float(&xdr, &result)) {printf("读取失败");return 1;}// 输出结果printf("读取结果:%f\n", result);return 0;
}

在上面的示例代码中,

  • 首先,我们调用 xdrmem_create() 函数创建了一个 XDR 流;
  • 然后,使用 xdr_float() 函数将 float 值写入流中;
  • 接着,通过调用 xdrrec_endofrecord() 函数将流重置为解码模式;
  • 再接着,使用 xdr_float() 函数从流中读取 float 值;
  • 最后,输出从流中读取的 float 值。

6. xdr_free

6.1 函数说明

函数声明函数功能
void xdr_free(xdrproc_t proc, char* objp);用于释放由 xdr 系列函数分配的动态内存空间

参数:

  • proc : 序列化或反序列化对象的指针类型
  • objp : 需要释放的动态分配内存的指针

6.2 演示示例

#include <stdio.h>
#include <rpc/xdr.h>struct Person {char *name;int age;
};int main() 
{// 创建 XDR 流XDR xdr;char buffer[1024];xdrmem_create(&xdr, buffer, sizeof(buffer), XDR_ENCODE);// 分配内存并编码数据到 XDR 流中struct Person *p = (struct Person *)xdr_malloc(&xdr, sizeof(struct Person));p->name = "Huazie";p->age = 18;xdr_struct(&xdr, "Person", (xdrproc_t)xdr_person, (char *)p);xdr_free((xdrproc_t)xdr_person, (char *)p);// 重置 XDR 流为解码模式xdrrec_endofrecord(&xdr, true);// 解码数据并释放内存struct Person result;if (xdr_struct(&xdr, "Person", (xdrproc_t)xdr_person, (char *)&result)) {printf("读取结果:name = %s, age = %d\n", result.name, result.age);xdr_free((xdrproc_t)xdr_person, (char *)&result);}else {printf("读取失败");}return 0;
}// 编码和解码 Person 类型数据
bool_t xdr_person(XDR *xdrs, struct Person *p) 
{return xdr_string(xdrs, &p->name, ~0) && xdr_int(xdrs, &p->age);
}

在上面的示例代码中,

  • 首先,定义了一个名为 Person 的结构体,其中包含了一个字符串类型的 name 字段和一个整数类型的 age 字段;
  • 然后,我们使用 xdrmem_create() 函数创建了一个 XDR 流,并将其绑定到buffer 缓冲区上;
  • 接着,我们调用 xdr_malloc() 函数分配了一个结构体 Person 的内存空间,分别赋值 name"Huazie"age18
  • 再然后,调用 xdr_struct() 函数将上述的结构体数据编码到 XDR 流中。在编码完成后,调用 xdr_free() 函数释放已分配的内存空间,以便在序列化过程中使用了动态分配的内存空间得到释放。
  • 再接着,我们将 XDR 流重置为解码模式;
  • 再然后,使用 xdr_struct() 函数从流中读取并解码数据。如果解码成功,则将结果存储在一个名为 resultPerson 结构体中。在解码完成后,我们使用 xdr_free() 函数释放动态分配的内存空间。
  • 最后,输出 Person 结构体中的 nameage 字段值。

7. xdr_hyper

7.1 函数说明

函数声明函数功能
bool_t xdr_hyper(XDR *xdrs, hyper *hp);用于编码和解码超长整数类型的数据

参数:

  • xdrs : 指向要编码或解码数据的 XDR 结构体的指针
  • hp : 指向要编码或解码的超长整数类型的指针

返回值:

  • 如果编码或解码成功,则返回值为 TRUE
  • 否则返回值为 FALSE

7.2 演示示例

#include <stdio.h>
#include <rpc/xdr.h>int main() 
{// 创建 XDR 流XDR xdr;char buffer[1024];xdrmem_create(&xdr, buffer, sizeof(buffer), XDR_ENCODE);// 编码超长整数类型的数据hyper h = 1234567890123456789;if (xdr_hyper(&xdr, &h)) {printf("编码成功\n");}// 重置 XDR 流为解码模式xdrrec_endofrecord(&xdr, true);// 解码超长整数类型的数据hyper result;if (xdr_hyper(&xdr, &result)) {printf("解码成功,result = %lld\n", result);}return 0;
}

在上面的示例代码中,

  • 首先,我们使用 xdrmem_create() 函数创建了一个 XDR 流,并将其绑定到buffer 缓冲区上;
  • 然后,定义了一个超长整数类型的变量 h,并将其赋值为 1234567890123456789
  • 接着,使用 xdr_hyper() 函数将超长整数类型的数据编码到 XDR 流中,并检查编码是否成功;如果编码成功,则输出 "编码成功"
  • 再接着,调用 xdrrec_endofrecord() 函数将 XDR 流重置为解码模式;
  • 最后, 调用 xdr_hyper() 函数将从 XDR 流中读出的数据解码为超长整数类型,并检查解码是否成功;如果解码成功,则输出解码结果。

8. xdr_int

8.1 函数说明

函数声明函数功能
bool_t xdr_int(XDR *xdrs, int *ip);用于将 int 类型数据编码为 XDR 流或从 XDR 流中解码出一个 int 类型数据

参数:
参数:

  • xdrs : 指向要编码或解码数据的 XDR 结构体的指针
  • ip : 指向要编码或解码的 int 类型数据的指针

返回值:

  • 如果编码或解码成功,则返回值为 TRUE
  • 否则返回值为 FALSE

8.2 演示示例

#include <stdio.h>
#include <rpc/xdr.h>int main() 
{// 创建 XDR 流XDR xdr;char buffer[1024];xdrmem_create(&xdr, buffer, sizeof(buffer), XDR_ENCODE);// 编码整数类型的数据int i = 12345;if (xdr_int(&xdr, &i)) {printf("编码成功\n");}// 重置 XDR 流为解码模式xdrrec_endofrecord(&xdr, true);// 解码整数类型的数据int result;if (xdr_int(&xdr, &result)) {printf("解码成功,result = %d\n", result);}return 0;
}

在上面的示例代码中,

  • 首先,我们调用 xdrmem_create() 函数创建了一个 XDR 流;
  • 然后,使用 xdr_int() 函数将 int 类型的值 12345 写入流中;如果返回 TRUE,则说明编码成功,输出 ”编码成功“
  • 接着,通过调用 xdrrec_endofrecord() 函数将流重置为解码模式;
  • 最后,使用 xdr_int() 函数从流中读取 int 类型的值;如果返回 TRUE,则说明解码成功,输出从流中读取的 int 类型的值。

9. xdr_long

9.1 函数说明

函数声明函数功能
bool_t xdr_long(XDR *xdrs, long *lp);用于将 long 类型数据编码为 XDR 流或从 XDR 流中解码出一个 long 类型数据

参数:

  • xdrs : 指向要编码或解码数据的 XDR 结构体的指针
  • lp : 指向要编码或解码的 long 类型数据的指针

返回值:

  • 如果编码或解码成功,则返回值为 TRUE
  • 否则返回值为 FALSE

9.2 演示示例

#include <stdio.h>
#include <rpc/xdr.h>int main() 
{// 创建 XDR 流XDR xdr;char buffer[1024];xdrmem_create(&xdr, buffer, sizeof(buffer), XDR_ENCODE);// 编码长整数类型的数据long l = 1234567890;if (xdr_long(&xdr, &l)) {printf("编码成功\n");}// 重置 XDR 流为解码模式xdrrec_endofrecord(&xdr, true);// 解码长整数类型的数据long result;if (xdr_long(&xdr, &result)) {printf("解码成功,result = %ld\n", result);}return 0;
}

在上面的示例代码中,

  • 首先,我们调用 xdrmem_create() 函数创建了一个 XDR 流;
  • 然后,使用 xdr_long() 函数将 long 类型的值 1234567890 写入流中;如果返回 TRUE,则说明编码成功,输出 ”编码成功“
  • 接着,调用 xdrrec_endofrecord() 函数将流重置为解码模式;
  • 最后,使用 xdr_long() 函数从流中读取 long 类型的值;如果返回 TRUE,则说明解码成功,输出从流中读取的 long 类型的值。

http://www.ppmy.cn/news/89048.html

相关文章

1113 Integer Set Partition (PAT甲级)

这道题就有点莫名其妙的。 #include <cstdio> #include <vector> #include <algorithm>int main(){int N, gap, s1, s2;std::vector<int> vec;scanf("%d", &N);vec.resize(N);for(int i 0; i < N; i){scanf("%d", &v…

小程序开发-后端基础知识(下)

数据库操作的基础知识 数据库是存储和管理数据的电子系统。数据库一般以表格的形式存储数据&#xff0c;表格中的行代表具体的数据记录&#xff0c;列则表示数据的不同属性。当我们需要查询、修改、添加或删除数据时&#xff0c;我们需要使用数据库操作。下面我们就来了解一些…

计算机毕业论文选题推荐|软件工程|系列八

文章目录 导文题目导文 计算机毕业论文选题推荐|软件工程 (***语言)==使用其他任何编程语言 例如:基于(***语言)门窗账务管理系统的设计与实现 得到:基于JAVA门窗账务管理系统的设计与实现 基于vue门窗账务管理系统的设计与实现 等等 题目 基于(***语言)应用负载仿真计…

java 注解学习

Java 语言中存在三类注解&#xff0c;分别是元注解&#xff08;Meta-annotations&#xff09;、Java 内置注解&#xff08;Built-in Annotations&#xff09;和自定义注解&#xff08;Custom Annotations&#xff09;。 1、元注解&#xff08;Meta-annotations&#xff09; 元…

Git错误non-fast-forward的解决方法

1、问题描述 当要push代码到git时&#xff0c;出现提示&#xff1a; $ git push origin master To ../remote/ ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to ../remote/ 2、分析问题 Dealing with “non-fast-forward” …

flask mysql Echart 实现数据库数据图表展示

实现步骤 第一步&#xff1a;准备数据库第二步&#xff1a;准备Echart第三步&#xff1a;绑定数据库信息和图表⚠️需要注意的几个地方 第一步&#xff1a;准备数据库 这部分内容查看我的上一篇内容&#xff1a; python flask p5.js mysql 实现数据库查询并网页显示数据 通过前…

目前国内有哪些开源的非 SaaS 团队协作平台、项目管理工具呢?

以下是一些常用的开源团队协作平台和项目管理工具&#xff1a; 1.Gitea Gitea 是一个轻量级的 Git 服务&#xff0c;它提供了一个基于 Web 的界面&#xff0c;以方便地管理 Git 存储库。Gitea 也是一个自托管的 Git 服务&#xff0c;可以轻松地在本地或云环境中部署。 2.GitL…

手摸手教你Vite+Vue3项目初始化及开源部署到GItee

项目初始化 本片文章主要记录项目的环境&#xff0c;项目搭建。 在开始本次学习中&#xff0c;鉴于你有前端三件套和vue的知识基础。 文档创建于2023年5月20日&#xff0c;大家都去过情人节了~我在肝代码&#xff01; 环境的搭建 node版本使用18.16.0。 目前&#xff08;202…