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

2023-10-31

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

1. xdr_opaque

1.1 函数说明

函数声明 函数功能
bool_t xdr_opaque(XDR *xdrs, char *buf, u_int len); 用于编码或解码任意长度的二进制数据

参数:

  • xdrs : 指向 XDR 数据结构的指针,表示要进行编码或解码的数据流
  • buf : 指向待编码或解码的二进制数据的指针
  • len : 待编码或解码的二进制数据的长度(以字节为单位)

返回值:

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

1.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <rpc/xdr.h>

int main() 
{
    // 编码数据
    char data[] = "hello, world!";
    XDR xdr;
    xdrmem_create(&xdr, NULL, 0, XDR_ENCODE);
    if (!xdr_opaque(&xdr, data, sizeof(data))) 
    {
        printf("Error: failed to encode data.\n");
        exit(EXIT_FAILURE);
    }
    // 获取编码后的数据并打印
    char *encoded_data = malloc(xdr_getpos(&xdr));
    xdrmem_create(&xdr, encoded_data, xdr_getpos(&xdr), XDR_DECODE);
    printf("Encoded data: ");
    for (int i = 0; i < xdr_getpos(&xdr); ++i) 
    {
        printf("%02x ", encoded_data[i]);
    }
    printf("\n");
    // 解码数据
    char decoded_data[sizeof(data)];
    if (!xdr_opaque(&xdr, decoded_data, sizeof(decoded_data))) 
    {
        printf("Error: failed to decode data.\n");
        exit(EXIT_FAILURE);
    }
    printf("Decoded data: %s\n", decoded_data);
    return 0;
}

在上面的示例代码中,

  • 首先,我们定义了一个字符串 "hello, world!" 作为将要编码的数据,并创建了一个 XDR 结构体;
  • 然后,调用 xdrmem_create() 函数初始化 XDR 结构体,使其可以从内存中读取和写入数据;
  • 接着,使用 xdr_opaque() 函数对字符串进行编码,将其转换为 XDR 格式;
  • 再然后,获取编码后的数据并打印;其中,
    • 我们先使用 xdr_getpos() 函数获取已编码数据的长度;
    • 然后再使用 xdrmem_create() 函数创建一个新的 XDR 结构体来解码它;
    • 最后,利用循环遍历编码后的数据并以十六进制形式打印出来。
  • 再接着,使用 xdr_opaque() 函数对编码后的数据进行解码;
  • 最后,打印解码后的数据。

2. xdr_opaque_auth

2.1 函数说明

函数声明 函数功能
bool_t xdr_opaque_auth(XDR *xdrs, struct opaque_auth *ap); 用于编码或解码 认证信息

参数:

  • xdrs : 指向 XDR 结构体的指针,用于指定编解码的上下文
  • ap : 指向 opaque_auth 结构体的指针,用于指定认证信息

返回值:

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

2.2 演示示例

2.2.1 opaque_auth

// 定义在 <rpc/auth.h>
struct opaque_auth {
    int oa_flavor;   // 认证方式(authentication flavor)
    caddr_t oa_base; // 不透明数据
    u_int oa_length; // 数据长度
};

2.2.2 test.c

#include <stdio.h>
#include <stdlib.h>
#include <rpc/xdr.h>
#include <rpc/auth.h>

int main() 
{
    // 编码数据
    struct opaque_auth auth;
    auth.oa_flavor = AUTH_NONE;
    auth.oa_base = NULL;
    auth.oa_length = 0;
    XDR xdr;
    xdrmem_create(&xdr, NULL, 0, XDR_ENCODE);
    if (!xdr_opaque_auth(&xdr, &auth)) 
    {
        printf("Error: failed to encode authentication information.\n");
        exit(EXIT_FAILURE);
    }
    // 获取编码后的数据并打印
    char *encoded_data = malloc(xdr_getpos(&xdr));
    xdrmem_create(&xdr, encoded_data, xdr_getpos(&xdr), XDR_DECODE);
    printf("Encoded data: ");
    for (int i = 0; i < xdr_getpos(&xdr); ++i) 
    {
        printf("%02x ", encoded_data[i]);
    }
    printf("\n");
    // 解码认证信息
    struct opaque_auth decoded_auth;
    xdrmem_create(&xdr, encoded_data, xdr_getpos(&xdr), XDR_DECODE);
    if (!xdr_opaque_auth(&xdr, &decoded_auth)) 
    {
        printf("Error: failed to decode authentication information.\n");
        exit(EXIT_FAILURE);
    }
    // 打印解码后的认证信息
    printf("Decoded authentication information:\n");
    printf("oa_flavor = %d\n", decoded_auth.oa_flavor);
    printf("oa_length = %u\n", decoded_auth.oa_length);
    return 0;
}

在上面的这个示例中,

  • 首先,我们创建一个 opaque_auth 结构体,并将其中的成员变量初始化。

注意: 由于使用的认证方式是 AUTH_NONE,也就是不需要任何认证信息;所以,oa_length 成员变量被设置为 0。在实际开发中,我们可能需要使用其他的认证方式,并相应地设置 opaque_auth 结构体的成员变量。】

  • 然后,使用 xdrmem_create() 函数创建一个 XDR 结构体,并将其指定为编码模式。

  • 接着,调用 xdr_opaque_auth() 函数对认证信息进行编码,并获取编码后的数据并打印出来【这里同 1.2 中,不再赘述】。

  • 再然后,使用 xdrmem_create() 函数创建一个新的 XDR 结构体,并将其指定为解码模式。

  • 再接着,调用 xdr_opaque_auth() 函数对编码后的认证信息进行解码,并通过访问 opaque_auth 结构体的成员变量来获取解码后的认证信息。

  • 最后,打印解码后的认证信息。

3. xdr_pointer

3.1 函数说明

函数声明 函数功能
bool_t xdr_pointer(XDR *xdrs, char **objpp, u_int obj_size, xdrproc_t xdr_obj) 用于编码和解码指针类型的数据

参数:

  • xdrs : 指向要编码或解码数据的 XDR 结构体的指针
  • objpp : 要编码或解码的数据的地址
  • obj_size : 要编码或解码的数据的大小(以字节为单位)
  • xdr_obj : 用于编码或解码指针所指向的数据

返回值:

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

关于 xdr_pointer() 函数的使用,参考如下:

  • 对于编码操作,xdr_pointer() 函数将指针 objpp 所指向的数据编码到 XDR 流中。如果 objpp 为 NULL,则写入一个特殊的标志来表示空指针。如果 objpp 不为 NULL,则先写入一个非零值来表示非空指针,然后调用指定的 XDR 编码程序对数据进行编码。

  • 对于解码操作,xdr_pointer() 函数从 XDR 流中读取一些字节,并根据这些字节创建一个新的数据对象。如果读取的字节表示一个空指针,则将 objpp 设置为 NULL。否则,将 objpp 设置为一个指向新对象的指针,并调用指定的 XDR 编码程序对数据进行解码。

3.2 演示示例

#include <stdio.h>
#include <rpc/xdr.h>

int main() 
{
    char buffer[1024];
    XDR xdrs;
    xdrmem_create(&xdr, buffer, sizeof(buffer), XDR_ENCODE); // 创建 XDR 流

    // 将指针编码为 XDR 流中的整数
    int pointer_value = 42;
    xdr_pointer(&xdrs, (char **)&pointer_value, sizeof(int), (xdrproc_t)xdr_int);

    // 打印编码后的值
    printf("Encoded value: %d\n", pointer_value);

    // 解码整数,还原指针
    xdr_setpos(&xdrs, 0);
    xdr_pointer(&xdrs, (char **)&pointer_value, sizeof(int), (xdrproc_t)xdr_int);

    // 打印解码后的指针值
    printf("Decoded value: %d\n", pointer_value);

    // 关闭流
    xdr_destroy(&xdrs);

    return 0;
}

在上面的示例代码中,

  • 首先,我们创建了一个 XDR 流对象 xdrs,并将其绑定到 buffer 数组上;
  • 然后,使用 xdr_pointer() 函数将 整数指针 pointer_value 写入流中;并输出 pointer_value 的值,这是编码后的整数;
  • 再接着,使用 xdr_setpos() 函数将 XDR 流的位置设置为 0
  • 再然后,使用 xdr_pointer() 函数从 XDR 流中解码整数值,并将其存储回 pointer_value 变量中;并输出 pointer_value 的值,这是解码后的整数指针;
  • 最后,使用 xdr_destroy() 函数关闭并释放 XDR 流对象,并结束程序。

4. xdr_replymsg

4.1 函数说明

函数声明 函数功能
bool_t xdr_replymsg(XDR *xdrs, struct rpc_msg *msg); 用于编码或解码应答消息

参数:

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

返回值:

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

在使用 xdr_replymsg() 函数之前,需要设置好 rpc_msg 结构体中的各个字段。rpc_msg 结构体用于表示 RPC 消息,其中包括以下字段:

  • uint32_t xid :表示此消息的标识符。
  • enum msg_type msg_type :表示消息类型,可以是 CALLREPLY
  • union rpc_body :表示 RPC 的主体部分,包括:
    • call_body :表示 CALL 消息的主体部分,包括 RPC 的程序号、版本号和过程号,以及传递给该过程的参数。
    • reply_body :表示 REPLY 消息的主体部分,包括返回值和可能的错误信息。

4.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <rpc/xdr.h>

int main() 
{
    // 创建 XDR 流对象
    char buffer[1024];
    XDR xdrs;
    xdrmem_create(&xdrs, buffer, sizeof(buffer), XDR_ENCODE);

    // 设置 rpc_msg 结构体
    struct rpc_msg msg = {.xid = 12345, .msg_type = REPLY};
    msg.acpted_rply.ar_verf = AUTH_NULL;
    msg.acpted_rply.ar_results.where = (char *)"Success";
    msg.acpted_rply.ar_results.proc = (xdrproc_t)xdr_string;

    // 编码应答消息
    if (!xdr_replymsg(&xdrs, &msg)) 
    {
        fprintf(stderr, "Failed to encode reply message\n");
        return 1;
    }

    // 打印编码后的结果
    printf("Encoded message: ");
    for (int i = 0; i < xdr_getpos(&xdrs); i++) 
    {
        printf("%02x", buffer[i] & 0xff);
    }
    printf("\n");

    // 解码应答消息
    struct rpc_msg decoded_msg;
    if (!xdr_replymsg(&xdrs, &decoded_msg)) 
    {
        fprintf(stderr, "Failed to decode reply message\n");
        return 1;
    }

    // 打印解码后的结果
    printf("Decoded message:\n");
    printf("XID: %d\n", decoded_msg.xid);
    printf("Message Type: %d\n", decoded_msg.msg_type);
    printf("Verf Flavor: %d\n", decoded_msg.acpted_rply.ar_verf.oa_flavor);
    printf("Verf Length: %d\n", decoded_msg.acpted_rply.ar_verf.oa_length);
    printf("Result:\n");
    char *result;
    if (!xdr_string(&xdrs, &result, sizeof(result))) 
    {
        fprintf(stderr, "Failed to decode result string\n");
        return 1;
    }
    printf("%s\n", result);

    return 0;
}

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

  • 首先,创建一个 XDR 流对象,并设置一个包含所需信息的 rpc_msg 结构体。
  • 接着,使用 xdr_replymsg() 函数将 rpc_msg 结构体编码为 XDR 格式。如果编码失败,则输出错误并退出程序。
  • 然后,打印编码后的结果,以便查看序列化的数据。
  • 再接着,使用 xdr_replymsg() 函数将编码后的数据解码回 rpc_msg 结构体。如果解码失败,则输出错误并退出程序。
  • 再然后,打印解码后的结果,包括事务 ID、消息类型、验证标志、结果等信息;
  • 最后,程序正常退出。

5. xdr_reference

5.1 函数说明

函数声明 函数功能
bool_t xdr_reference(XDR *xdrs, char **objp, u_int obj_size, xdrproc_t xdr_func); 用于编码或解码一个指向某个对象的引用

参数:

  • xdrs : 指向要编码或解码数据的 XDR 结构体的指针
  • objp : 指向要编码或解码的某个指针对象的引用
  • obj_size : 引用的指针对象的大小
  • xdr_func : 指向 XDR 函数的指针,用于编码或解码 objp 所指向的数据对象

返回值:

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

5.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <rpc/xdr.h>

int main() 
{
    // 创建 XDR 流对象
    char buffer[1024];
    XDR xdrs;
    xdrmem_create(&xdrs, buffer, sizeof(buffer), XDR_ENCODE);

    // 设置字符串指针
    char *str = "Hello, world!";

    // 编码字符串指针
    if (!xdr_reference(&xdrs, &str, strlen(str) + 1, (xdrproc_t)xdr_string)) 
    {
        fprintf(stderr, "Failed to encode string reference\n");
        return EXIT_FAILURE;
    }

    // 打印编码后的结果
    printf("Encoded message: ");
    for (int i = 0; i < xdr_getpos(&xdrs); i++) 
    {
        printf("%02x", buffer[i] & 0xff);
    }
    printf("\n");

    // 创建一个新的 XDR 流对象,并反序列化字符串指针
    XDR new_xdrs;
    xdrmem_create(&new_xdrs, buffer, sizeof(buffer), XDR_DECODE);

    char *decoded_str = NULL;
    if (!xdr_reference(&new_xdrs, &decoded_str, strlen(str) + 1, (xdrproc_t)xdr_string)) 
    {
        fprintf(stderr, "Failed to decode string reference\n");
        return EXIT_FAILURE;
    }

    // 打印解码后的结果
    printf("Decoded message: %s\n", decoded_str);

    return EXIT_SUCCESS;
}

在上面的示例代码中,

  • 首先,我们调用 xdrmem_create() 函数创建了一个 XDR 流对象 xdrs,并和 buffer 绑定;
  • 然后,定义了一个字符串指针 str 并初始化为 "Hello, world!"
  • 接着,调用 xdr_reference() 函数对 str 进行编码,并将结果存储到 buffer 中。如果编码成功,则打印出编码后的消息;
  • 再接着,调用 xdrmem_create() 函数创建了一个新的 XDR 流对象 new_xdrs ,并和 buffer 绑定;
  • 再然后,调用 xdr_reference() 函数解码 decoded_str,并从 new_xdrs 对象中读取编码数据。如果解码成功,则打印出解码后的消息。
  • 最后,程序正常退出。

6. xdr_rpc_gss_data

6.1 函数说明

函数声明 函数功能
bool_t xdr_rpc_gss_data(XDR * xdrs, rpc_gss_data * gd); 用于编码或解码 RPC GSS 数据

参数:

  • xdrs : 指向要编码或解码数据的 XDR 结构体的指针
  • gd : 指向 rpc_gss_data 结构体的指针

返回值:

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

6.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <rpc/rpc.h>
#include <rpc/auth_gss.h>

int main()
{
    rpc_gss_data gd;
    XDR xdr;
    char buffer[1024];
    bool_t status;
    
    memset(&gd, 0, sizeof(gd));
    memset(&xdr, 0, sizeof(xdr));
    
    xdrmem_create(&xdr, buffer, sizeof(buffer), XDR_ENCODE);
    status = xdr_rpc_gss_data(&xdr, &gd);
    if (!status) 
    {
        fprintf(stderr, "Serialization failed.\n");
        exit(1);
    }
    
    xdrmem_create(&xdr, buffer, sizeof(buffer), XDR_DECODE);
    status = xdr_rpc_gss_data(&xdr, &gd);
    if (!status) 
    {
        fprintf(stderr, "Deserialization failed.\n");
        exit(1);
    }
    
    return 0;
}

7. xdr_rpcb

7.1 函数说明

函数声明 函数功能
bool_t xdr_rpcb(XDR *xdrs, struct rpcb *objp); 用于编码和解码 RPCBIND 程序号和版本号,以及程序地址信息

参数:

  • xdrs : 指向要编码或解码数据的 XDR 结构体的指针
  • objp : 指向 rpcb 结构体的指针

返回值:

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

7.2 演示示例

// RPCBIND 程序号和版本号,以及程序地址
struct rpcb {
    char *r_progname;
    u_long r_progvers;
    struct netbuf r_addr;
    char *r_netid;
};
// 网络地址信息
struct netbuf {
    u_int maxlen;
    u_int len;
    char *buf;
};
#include <stdio.h>
#include <rpc/rpc.h>

int main() 
{
    struct rpcb rpcb_obj = {"my_program", 1, {0, 0, NULL}, "tcp"};

    XDR xdr;
    char buffer[1024];

    xdrmem_create(&xdr, buffer, sizeof(buffer), XDR_ENCODE);

    if (xdr_rpcb(&xdr, &rpcb_obj)) 
    {
        printf("Serialization success!\n");
    } 
    else 
    {
        printf("Serialization failed!\n");
    }

    return 0;
}

8. xdr_short

8.1 函数说明

函数声明 函数功能
bool_t xdr_short(XDR *xdrs, short *sp); 用于编码或解码短整型数据

参数:
参数:

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

返回值:

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

8.2 演示示例

#include <rpc/xdr.h>
#include <stdio.h>

int main() 
{
    XDR xdr;
    char buf[256];
    short num = 42;

    // 初始化 XDR 流结构体
    xdrmem_create(&xdr, buf, sizeof(buf), XDR_ENCODE);

    // 编组 short 类型变量
    if (!xdr_short(&xdr, &num)) 
    {
        fprintf(stderr, "编组失败!\n");
        return 1;
    }

    // 重置流位置
    xdr_setpos(&xdr, 0);

    // 解组 short 类型变量
    short decoded_num;
    if (!xdr_short(&xdr, &decoded_num)) 
    {
        fprintf(stderr, "解组失败!\n");
        return 1;
    }

    printf("编组的值:%d,解组的值:%d\n", num, decoded_num);
    return 0;
}

9. xdr_string

9.1 函数说明

函数声明 函数功能
bool_t xdr_string(XDR *xdrs, char **cpp, u_int maxsize); 用于编码或解码字符串数据

参数:

  • xdrs : 指向要编码或解码数据的 XDR 结构体的指针
  • cpp : 指向要编码或解码的字符串数据的指针
  • maxsize : 最大允许的字符串长度

返回值:

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

9.2 演示示例

#include <stdio.h>
#include <rpc/xdr.h>

int main() 
{
    char *str = "hello world!";
    char buf[1024];
    XDR xdrs;

    xdrmem_create(&xdrs, buf, sizeof(buf), XDR_ENCODE);

    if (!xdr_string(&xdrs, &str, strlen(str))) 
    {
        printf("Serialization failed.\n");
    } 
    else 
    {
        printf("Serialized data:\n");
        for (int i = 0; i < xdr_getpos(&xdrs); i++) 
        {
            printf("%02x ", buf[i]);
        }
        printf("\n");
    }

    return 0;
}

10. xdr_string_ptr

10.1 函数说明

函数声明 函数功能
bool_t xdr_string_ptr(XDR *xdrs, char **cpp, const uint_t maxsize); 用于编码或解码指向字符串的指针

参数:

  • xdrs : 指向要编码或解码数据的 XDR 结构体的指针
  • cpp : 指向要编码或解码的字符串数据的指针
  • maxsize : 最大允许的字符串长度

返回值:

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

10.2 演示示例

#include <stdio.h>
#include <rpc/xdr.h>

int main() 
{
    char str[50] = "Hello, world!";
    XDR xdrs;
    xdrmem_create(&xdrs, str, sizeof(str), XDR_ENCODE);
    xdr_string_ptr(&xdrs, &str, sizeof(str));
    printf("Encoded string: %s\n", str);

    char decoded_str[50];
    xdrmem_create(&xdrs, str, sizeof(str), XDR_DECODE);
    xdr_string_ptr(&xdrs, &decoded_str, sizeof(decoded_str));
    printf("Decoded string: %s\n", decoded_str);

    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言函数大全-- x 开头的函数(3) 的相关文章

  • C语言函数大全-- w 开头的函数(1)

    w 开头的函数 1 1 wcscat 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 wcschr 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 wcscmp 3 1 函数说明 3 2 演示示例 3 3 运行结果 4
  • C语言函数大全-- _w 开头的函数(4)

    w 开头的函数 4 1 wstrtime 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 wstrtime s 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 wsetlocale 3 1 函数说明 3 2 演示示例 3
  • C语言函数大全-- x 开头的函数(3)

    x 开头的函数 3 1 xdr opaque 1 1 函数说明 1 2 演示示例 2 xdr opaque auth 2 1 函数说明 2 2 演示示例 2 2 1 opaque auth 2 2 2 test c 3 xdr pointe
  • C语言函数大全-- l 开头的函数

    l 开头的函数 1 labs llabs 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 ldexp ldexpf ldexpl 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 ldiv lldiv 3 1 函数说明 3
  • C语言函数大全-- p 开头的函数

    p 开头的函数 1 perror 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 pieslice 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 pow powf powl 3 1 函数说明 3 2 演示示例 3 3
  • C语言函数大全-- l 开头的 Linux 内核函数(链表管理函数)

    l 开头的 Linux 内核函数 链表管理函数 1 list add list add tail 1 1 函数说明 1 2 演示示例 2 list cut before list cut position 2 1 函数说明 2 2 演示示例
  • C语言函数大全-- s 开头的函数(3)

    s 开头的函数 3 1 sleep 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 sopen 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 sound 3 1 函数说明 3 2 演示示例 4 spawnl 4 1 函
  • C语言函数大全-- z 开头的函数

    z 开头的函数 1 zalloc 1 1 函数说明 1 2 演示示例 2 zcalloc 2 1 函数说明 2 2 演示示例 3 zcfree 3 1 函数说明 3 2 演示示例 4 zclearerr 4 1 函数说明 4 2 演示示例
  • C语言函数大全-- x 开头的函数(5)

    x 开头的函数 5 1 xdrmem create 1 1 函数说明 1 2 演示示例 2 xdrmem destroy 2 1 函数说明 2 2 演示示例 3 xdrrec create 3 1 函数说明 3 2 演示示例 4 xdrre
  • C语言函数大全-- u 开头的函数

    u 开头的函数 1 ultoa 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 ungetc 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 ungetch 3 1 函数说明 3 2 演示示例 3 3 运行结果 4 un
  • C语言函数大全-- v 开头的函数

    v 开头的函数 1 va start 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 va arg 2 1 函数说明 2 2 演示示例 3 va copy 3 1 函数说明 3 2 演示示例 4 va end 4 1 函数说明 4
  • C语言函数大全--e开头的函数

    e开头的函数 1 ecvt 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 ellipse 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 eof 3 1 函数说明 3 2 演示示例 3 3 运行结果 4 execl 4
  • C语言函数大全--h开头的函数

    h开头的函数或宏 1 hypot hypotf hypotl 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 HUGE VAL HUGE VALF HUGE VALL 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 ha
  • C语言函数大全-- x 开头的函数(1)

    x 开头的函数 1 1 xdr accepted reply 1 1 函数说明 1 2 演示示例 1 2 1 accepted reply 1 2 2 Test c 2 xdr array 2 1 函数说明 2 2 演示示例 3 xdr a
  • C语言函数大全-- k 开头的函数

    k 开头的函数 1 kcalloc 1 1 函数说明 1 2 演示示例 2 kbhit 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 keep 3 1 函数说明 3 2 演示示例 4 kernel thread 4 1 函数说明
  • C语言函数大全-- y 开头的函数

    y 开头的函数 1 yperror 1 1 函数说明 1 2 演示示例 2 yp match 2 1 函数说明 2 2 演示示例 3 y0 零阶第二类贝塞尔函数 3 1 函数说明 3 2 演示示例 3 3 运行结果 4 y1 一阶第二类贝塞
  • C语言函数大全--f开头的函数(下)

    f开头的函数 下 21 floor floorf floorl 21 1 函数说明 21 2 演示示例 21 3 运行结果 22 flushall 22 1 函数说明 22 2 演示示例 22 3 运行结果 23 fma fmaf fmal
  • C语言函数大全-- i 开头的函数

    i 开头的函数 1 imagesize 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 initgraph 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 inport 3 1 函数说明 3 2 演示示例 4 insli
  • C语言函数大全-- s 开头的函数(4)

    s 开头的函数 4 1 strdup 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 stricmp 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 strerror 3 1 函数说明 3 2 演示示例 3 3 运行结果
  • C语言函数大全-- x 开头的函数(4)

    x 开头的函数 4 1 xdr struct 1 1 函数说明 1 2 演示示例 2 xdr u char 2 1 函数说明 2 2 演示示例 3 xdr u hyper 3 1 函数说明 3 2 演示示例 4 xdr u int 4 1

随机推荐

  • 在HBuilder中怎么创建Vue项目

    软件信息 HBuilder X 3 1 18 目录 1 新建Element UI项目 2 更改App vue内容 3 在src中创建router文件夹并新建index js文件 4 在src中创建components文件夹存放组件 5 在s
  • django model字段

    1 AutoField 一个自动递增的整型字段 添加记录时它会自动增长 你通常不需要直接使用这个字段 如果你不指定主键的话 系统会自动添加一个主键字段到你的model 2 BooleanField 布尔字段 管理工具里会自动将其描述为che
  • Python与数据分析--Matplotlib-1

    目录 1 Matplotlib库函数导入 2 简单尝试绘图 3 绘制多条折线图 4 绘制多种颜色风格曲线 5 图片内容文本操作实例 6 图例设置实例 7 坐标轴设置实例 1 Matplotlib库函数导入 导入matplotlib库 imp
  • dplyr:一套数据处理语法

    可能更多的人知道Hadley大神是因为他那大名鼎鼎的ggplot2 但dplyr包也不遑多让 作为一套数据处理与清洗的语法 dplyr包都是你玩转数据的必备武器 R在基础配置中进行数据处理无疑也是okay的 但总有懒人会想到要偷更多懒 于是
  • Demo产品模块

  • 对称加密算法(DES、3DES、AES)

    文章目录 DES 3DES AES DES DES加密算法因现代的计算能力 已经被淘汰掉了 因为现在在24小时内就可以被破解 特点 分组加密算法 明文以64位分组 64位明文输入 64位密文输出 对称算法 加密和解密使用同一密钥 有效密钥长
  • servlet 3.0使用和原理

    目录 Servlet 3 0 起步 Servlet 3 0 异步 SPI原理分析 使用SPI手写Servlet 3 0 Servlet 3 0 起步 Servlet 3 0新增了若干注解 用于简化Servlet 过滤器和监听器的声明 使得w
  • LeetCode刷题之“最长公共前缀“的python解法之一

    最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀 如果不存在公共前缀 返回空字符串 示例 1 输入 flower flow flight 输出 fl 示例 2 输入 dog racecar car 输出 解释 输入不存在公共前缀
  • 图片路径转文件流

    export const imageToBase64 img gt Vue prototype imageToBase64 img gt 定义全局 var canvas document createElement canvas canva
  • 【DL】第 5 章:生成模型

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • C++数据结构笔记(6)栈的链式存储结构

    对于栈的链式存储结构 实现原理本质上是受限的链表 此外与顺序存储不同的是 链式结构选用左边 头结点 作为栈的顶部 这样的好处是只要找到头结点即可实现插入元素等操作 LinkStack h头文件 ifndef LINKSTACK H defi
  • 好用的C库-cmockery单元测试

    cmockery简单使用 一 介绍 cmockery是用来给C语言函数做单元测试使用的 代码 我是很推崇面向API编程的 写功能的时候 尽可能先把问题拆分成几个接口 接口命名好之后 再实现 所以 我想弄个单元测试的库 督促自己面向API编程
  • 深度学习之LSTM时间序列预测

    LSTM long short term memory LSTM 长短时记忆网络 是循环神经网络 recurrent neural network RNN 的一个重要结构 循环神经的主要用途是处理和预测序列数据 全连接神经网络 感知机 BP
  • 高中计算机教案excel,[转载]高中信息技术教案(第三章Excel)

    课题 认识Excel 教学时间 授课班级 教学目标 了解Excel的启动 退出熟悉电子表格的功能 特点及应用 掌握Excel窗口各个组成部分 学会区分工作表和工作簿 了解工具菜单自定义与选项命令 教学重点 工作表和工作簿的关系 制定义Exc
  • 目标检测2022最新进展

    文章目录 前言 Swim Transformer V2 Swin Transformer Dynamic Head YOLOF YOLOR YOLOX Scaled YOLOv4 Scale Aware Trident Networks D
  • openssl md5算法 —— Linux下(字符串加密、文件加密)

    理解openssl md5 OpenSSL 是一个安全套接字层密码库 囊括主要的密码算法 常用的密钥和证书封装管理功能及SSL协议 并提供丰富的应用程序供测试或其它目的使用 OpenSSL被曝出现严重安全漏洞后 发现多数通过SSL协议加密的
  • Linux Qt编程——在程序中启动其他应用、脚本

    我们在编程过程中 经常会遇到这样的需求 点击一下按钮 启动另外一个应用程序 或者执行一个脚本 你一定觉得这个多简单啊 有什么可写的 其实实现同一个功能 不同的开发人员写出的代码可能千差万别 执行效率 容错率 是否有唯一启动保护等 当然 我们
  • MySQL事务(transaction) (有这篇就足够了..)

    MySQL事务处理 TransAction 大家好 我是lasting 一名热爱分享技术干货的博主 思考了很久 决定写一篇关于mysql事务 transaction 的博客 一来嘛 因为最近在复习mysql的相关知识 帮自己回顾总结一下 其
  • Linux上的gitlab日常操作

    Linux上的gitlab日常操作 一 本地创建系统用户 1 创建zhangsan用户 2 创建数据存放目录 二 git用户信息配置 1 git信息配置 2 查看git信息状态 三 下载代码版本库 1 进行证书忽略 2 下载版本库 3 进行
  • C语言函数大全-- x 开头的函数(3)

    x 开头的函数 3 1 xdr opaque 1 1 函数说明 1 2 演示示例 2 xdr opaque auth 2 1 函数说明 2 2 演示示例 2 2 1 opaque auth 2 2 2 test c 3 xdr pointe