繁体   English   中英

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

[英]Returning string from function having multiple NULL '\0' in C++

我正在压缩字符串。 并且压缩的字符串有时在结束NULL之前的内部具有NULL字符。 我想将字符串返回到null结尾,但是压缩器函数将返回字符串直到出现第一个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. 使用一些定义明确的编码将文本转换为二进制。 例如,UTF-8。 这将产生一个unsigned char数组。
  2. 压缩unsigned char ,这将再次产生unsigned char数组,但现在已压缩。

要解压缩,只需反转这些步骤。

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

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

但是您确实必须首先克服这种尝试以文本数据类型存储二进制数据的愿望。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM