Sample code for 30+ languages & platforms
DataFlex

Compress and Decompress Hex String

See more Compression Examples

Imagine we have data represented as a hex string. This example demonstrates how to decode, compress, and re-encode to a smaller hex string representing the compressed data. An even better choice is to re-encode to a more compact encoding such as base64.

Note: This example requires Chilkat v9.5.0.66 or greater.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    String sStrHex
    Handle hoCompress
    Variant vBinDat
    Handle hoBinDat
    String sCompressedHex
    String sCompressedBase64
    String sDecompressedHex

    Move False To iSuccess

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

    Move "54686520717569636B2062726F776E20666F78206A756D706564206F76657220746865206C617A7920646F672E0D0A54686520717569636B2062726F776E20666F78206A756D706564206F76657220746865206C617A7920646F672E0D0A54686520717569636B2062726F776E20666F78206A756D706564206F76657220746865206C617A7920646F672E0D0A54686520717569636B2062726F776E20666F78206A756D706564206F76657220746865206C617A7920646F672E0D0A54686520717569636B2062726F776E20666F78206A756D706564206F76657220746865206C617A7920646F672E0D0A0D0A" To sStrHex

    Get Create (RefClass(cComChilkatCompression)) To hoCompress
    If (Not(IsComObjectCreated(hoCompress))) Begin
        Send CreateComObject of hoCompress
    End
    Set ComAlgorithm Of hoCompress To "deflate"

    Get Create (RefClass(cComChilkatBinData)) To hoBinDat
    If (Not(IsComObjectCreated(hoBinDat))) Begin
        Send CreateComObject of hoBinDat
    End
    // Load the hex string into a BinData object.
    // This decodes the hexidecimal. The decoded bytes will be contained in the BinData.
    Get ComAppendEncoded Of hoBinDat sStrHex "hex" To iSuccess

    // Compress the BinData.
    Get pvComObject of hoBinDat to vBinDat
    Get ComCompressBd Of hoCompress vBinDat To iSuccess

    // Get the compressed data in hex format:
    Get ComGetEncoded Of hoBinDat "hex" To sCompressedHex
    Showln "compressed hex:"
    Showln sCompressedHex

    // The compressed hex is: 0BC94855282CCD4CCE56482ACA2FCF5348CBAF50C82ACD2D484D51C82F4B2D522801CAE72456552AA4E4A7EBF172850C61E5BC5C00

    // Even better, get the compressed data in base64 format:
    // (base64url and modbase64 are other valid choices...)
    Get ComGetEncoded Of hoBinDat "base64" To sCompressedBase64
    Showln "compressed base64:"
    Showln sCompressedBase64

    // The compressed base64 is: C8lIVSgszUzOVkgqyi/PU0jLr1DIKs0tSE1RyC9LLVIoAcrnJFZVKqTkp+vxcoUMYeW8XAA=

    // Now decompress:
    Get ComClear Of hoBinDat To iSuccess
    Get ComAppendEncoded Of hoBinDat sCompressedHex "hex" To iSuccess
    Get pvComObject of hoBinDat to vBinDat
    Get ComDecompressBd Of hoCompress vBinDat To iSuccess

    Get ComGetEncoded Of hoBinDat "hex" To sDecompressedHex
    Showln "decompressed hex:"
    Showln sDecompressedHex

    // The output is the original hex string:
    // 54686520717569636B2062726F776E20666F78206A756D706564206F76657220746865206C617A7920646F672E0D0A54686520717569636B2062726F776E20666F78206A756D706564206F76657220746865206C617A7920646F672E0D0A54686520717569636B2062726F776E20666F78206A756D706564206F76657220746865206C617A7920646F672E0D0A54686520717569636B2062726F776E20666F78206A756D706564206F76657220746865206C617A7920646F672E0D0A54686520717569636B2062726F776E20666F78206A756D706564206F76657220746865206C617A7920646F672E0D0A0D0A


End_Procedure