Sample code for 30+ languages & platforms
Unicode C

Compress Text Feed to Binary

See more Compression Examples

This example receives incoming text data in chunks, compresses as a stream, and accumulates the compressed binary data.

Chilkat Unicode C Downloads

Unicode C
#include <C_CkBinDataW.h>
#include <C_CkCompressionW.h>
#include <C_CkStringBuilderW.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkBinDataW bdCompressed;
    HCkCompressionW compress;
    HCkStringBuilderW sbUncompressedChunk;
    int i;
    HCkBinDataW bdDecompressed;
    const wchar_t *originalText;

    success = FALSE;

    // This example assumes the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    bdCompressed = CkBinDataW_Create();

    compress = CkCompressionW_Create();
    CkCompressionW_putAlgorithm(compress,L"deflate");
    CkCompressionW_putCharset(compress,L"utf-8");

    sbUncompressedChunk = CkStringBuilderW_Create();

    CkCompressionW_putFirstChunk(compress,TRUE);
    CkCompressionW_putLastChunk(compress,FALSE);

    for (i = 0; i <= 24; i++) {
        if (i == 24) {
            CkCompressionW_putLastChunk(compress,TRUE);
        }

        CkStringBuilderW_Clear(sbUncompressedChunk);
        CkStringBuilderW_AppendInt(sbUncompressedChunk,i);
        CkStringBuilderW_Append(sbUncompressedChunk,L": This is a line of data to be compressed...\r\n");

        CkCompressionW_CompressSb(compress,sbUncompressedChunk,bdCompressed);

        CkCompressionW_putFirstChunk(compress,FALSE);
    }

    // Show the compressed data in hex format:
    wprintf(L"The hex encoded compressed text:\n");
    wprintf(L"%s\n",CkBinDataW_getEncoded(bdCompressed,L"hex"));

    // Now decompress in one call.  It is important to set both FirstChunk and LastChunk = TRUE
    bdDecompressed = CkBinDataW_Create();
    CkCompressionW_putFirstChunk(compress,TRUE);
    CkCompressionW_putLastChunk(compress,TRUE);
    success = CkCompressionW_DecompressBd2(compress,bdCompressed,bdDecompressed);
    if (success == FALSE) {
        wprintf(L"%s\n",CkCompressionW_lastErrorText(compress));
        CkBinDataW_Dispose(bdCompressed);
        CkCompressionW_Dispose(compress);
        CkStringBuilderW_Dispose(sbUncompressedChunk);
        CkBinDataW_Dispose(bdDecompressed);
        return;
    }

    originalText = CkBinDataW_getString(bdDecompressed,L"utf-8");
    wprintf(L"%s\n",originalText);


    CkBinDataW_Dispose(bdCompressed);
    CkCompressionW_Dispose(compress);
    CkStringBuilderW_Dispose(sbUncompressedChunk);
    CkBinDataW_Dispose(bdDecompressed);

    }