我想使用字节对编码来解压缩字节数组。我拥有的源代码(不是我的)是使用文件流逐字节读取文件。但是,我想解压缩char *
.
我一直在尝试使用 stringstream 和其他东西来转换它,但我不知道如何做到这一点。
我想这样使用它:expand(char *inputarray, char *outputarray)
我是 C++ 新手,刚从 vb.net 切换过来,所以不要对我太苛刻 :)
这是代码:
/* expand.c */
/* Copyright 1994 by Philip Gage */
#include <stdio.h>
/* decompress data from input to output */
void expand (FILE *input, FILE *output)
{
unsigned char left[256], right[256], stack[30];
short int c, count, i, size;
/* unpack each block until end of file */
while (( count = getc ( input )) != EOF )
{
/* set left to itself as literal flag */
for ( i = 0 ; i < 256; i++ )
{
left[i] = i;
}
/* read pair table */
for ( c = 0 ; ; )
{
/* skip range of literal bytes */
if ( count > 127 )
{
c += count -127;
count = 0;
}
if ( c==256 )
{
break;
}
/* read pairs, skip right if literal */
for ( i = 0; i <= count; i++, c++ )
{
left[c] = getc(input);
if ( c != left[c] )
{
right[c] = getc(input);
}
}
if (c == 256)
{
break;
}
count = getc(input);
}
/* calculate packed data block size */
size = 256 * getc(input) + getc(input);
/* unpack data block */
for ( i = 0 ; ; )
{
/* pop byte from stack or read byte */
if ( i )
{
c = stack[--i];
}
else
{
if ( !size--)
{
break;
}
c = getc(input);
}
/* output byte or push pair on stack */
if ( c == left[c] )
{
putc(c, output);
}
else
{
stack[i++] = right[c];
stack[i++] = left[c];
}
}
}
}
void main ( int argc, char *argv[] )
{
FILE *infile, *outfile;
if ( argc != 3 )
{
printf("Usage: expand infile outfile\n");
}
else
{
if (( infile = fopen(argv[1],"rb"))==NULL)
{
printf("Error opening input %s\n",argv[1]);
}
else
{
if ((outfile=fopen(argv[2],"wb"))==NULL)
{
printf("Error opening output %s\n", argv[2]);
}
else
{
expand ( infile, outfile );
fclose ( outfile );
fclose ( infile );
}
}
}
}
/* end of file */