从C ++中具有多个NULL'\ 0'的函数返回字符串

时间:2014-09-15 18:43:50

标签: c++ string compression

我在压缩字符串。并且压缩字符串有时在结束NULL之前具有NULL字符。我想返回字符串直到结束null。但压缩器函数返回sting直到第一个NULL发生。关于它之前,我向c提出了一个问题。但是我现在还需要C ++中的解决方案,以及下一个C#。请帮帮我。谢谢。

char* compressor(char* str)
    {
      char *compressed_string;
      //After some calculation
      compressed_string="bk`NULL`dk";// at the last here is automatic  an NULL we all know
    return compressed_string;
    }
void main()
   {
    char* str;
    str=compressor("Muhammad Ashikuzzaman");
    printf("Compressed Value = %s",str);

   }

输出为:压缩值= bk; 压缩器功能的所有其他字符都不在这里。有没有办法显示所有字符串。

1 个答案:

答案 0 :(得分:3)

您遇到的根本问题是压缩算法对二进制数据而不是文本进行操作。如果压缩某些东西,那么期望一些压缩字节为零。因此,压缩数据不能存储在以null结尾的字符串中。

您需要改变您的心态以使用二进制数据。

要压缩,请执行以下操作:

  1. 使用一些明确定义的编码从文本转换为二进制。例如,UTF-8。这将产生一个unsigned char
  2. 数组
  3. 压缩unsigned char,这将再次生成一个unsigned char数组,但现在已压缩。
  4. 要解压缩,只需撤消这些步骤。

    由于您正在编写C ++代码,因此建议您使用标准容器。例如std::stringstd::wstringstd::vector<T>

    完全相同的原则适用于所有语言。当您使用C#编写代码时,需要将文本转换为二进制。使用Encoding.GetBytes()来执行此操作。这会产生一个字节数组byte[]。将其压缩到另一个字节数组。等等。

    但是你必须首先克服这种尝试在文本数据类型中存储二进制数据的愿望。