gpt4 book ai didi

c - 用于迭代字符串 block 以在 C 中构建新字符串的模式?

转载 作者:行者123 更新时间:2023-12-04 05:29:11 25 4
gpt4 key购买 nike

我的问题标题不清楚,抱歉。我试过了;)

  • 我有一个 二进制 包含空字节的字符串。
  • 我知道字符串的长度。
  • 我有一个函数(来自库)将字符串编码为另一种格式。
  • 我需要使用库函数对二进制字符串进行编码。
  • 库函数不接受长度 & 假设字符串以 null 结尾。
  • 我知道如何手动编码 nul 字节(将它们表示为 "\\000" )

  • 取伪代码:
    /* I have a string, and the length in bytes of that string */
    char * data = value->bytes;
    long length = value->length;

    /* I need to use a function, but it doesn't handle embedded nuls */
    char * encoded = lib_func_encode(data);
    lib_free(encoded); // library function requires a free() routine be called

    那个 不起作用 ,因为库函数只对 data 的第一个块进行编码直到第一个空字节。我可以写一个相当可怕的循环,在 data 上不断调用 strlen()并计数到 length字节已被编码,附加一个 "\\0000" string 每次我需要编码更多字节时,重新分配一些缓冲区以容纳每个额外的编码数据块。感觉这将是很多代码来解决一个相当简单的问题。来自一种具有类似 split() 概念的语言(在空字节上) map() (对每个块进行编码)和 join() (使用 "\\000" )我本能地考虑最干净的解决方案……但标准 C 中没有任何东西可以做这样的事情。

    在虚构的函数式语言中,它可能看起来像:
    join("\\000",
    map(lambda(chunk){encode(chunk)}, split('\0', data)))

    一个经验丰富的 C 程序员将如何编写我需要编写的例程?

    最佳答案

    您可以分多个步骤完成:

  • 查找所有嵌入的空字节
  • 从这个和长度你可以计算一个新字符串的长度
  • 分配一个计算长度的新字符串
  • 遍历二进制字符串复制所有非空字符,当到达空字符时插入特殊字符序列
  • 终止新字符串
  • 用新字符串调用库函数
  • 释放新字符串
  • 关于c - 用于迭代字符串 block 以在 C 中构建新字符串的模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12834947/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com