⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ascii85.cpp

📁 ncbi源码
💻 CPP
字号:
/* * =========================================================================== * PRODUCTION $Log: ascii85.cpp,v $ * PRODUCTION Revision 1000.1  2004/06/01 19:39:50  gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.2 * PRODUCTION * =========================================================================== *//*  $Id: ascii85.cpp,v 1000.1 2004/06/01 19:39:50 gouriano Exp $ * =========================================================================== * *                            PUBLIC DOMAIN NOTICE *               National Center for Biotechnology Information * *  This software/database is a "United States Government Work" under the *  terms of the United States Copyright Act.  It was written as part of *  the author's official duties as a United States Government employee and *  thus cannot be copyrighted.  This software/database is freely available *  to the public for use. The National Library of Medicine and the U.S. *  Government have not placed any restriction on its use or reproduction. * *  Although all reasonable efforts have been taken to ensure the accuracy *  and reliability of the software and data, the NLM and the U.S. *  Government do not and cannot warrant the performance or results that *  may be obtained by using this software or data. The NLM and the U.S. *  Government disclaim all warranties, express or implied, including *  warranties of performance, merchantability or fitness for any particular *  purpose. * *  Please cite the author in any work or product based on this material. * * =========================================================================== * * Author: Peter Meric * * File Description: *    ASCII base-85 conversion functions * */#include <ncbi_pch.hpp>#include <util/ascii85.hpp>BEGIN_NCBI_SCOPEsize_t CAscii85::s_Encode(const char* src_buf, size_t src_len,                          char* dst_buf, size_t dst_len                         ){    if (!src_buf || !src_len) {        return 0;    }    if (!dst_buf || !dst_len) {        return 0;    }    char* dst_ptr = dst_buf;    union UVal    {        long num;        char chars[4];    };    for (const char* src_ptr = src_buf, *src_end = src_buf + src_len;         dst_len != 0 && src_ptr < src_end;         src_len -= 4        )    {        const unsigned int l = src_len > 4 ? 4 : src_len;        const unsigned int grplen = l + 1;        unsigned long val = 0;        for (int shft = 8 * (l - 1); shft >= 0; shft -= 8, ++src_ptr) {            val |= ((unsigned char) *src_ptr) << shft;        }        // special case - if values are all zero, output 'z'        if (val == 0 && grplen == 5) {            *dst_ptr++ = 'z';            --dst_len;            continue;        }        char out[5] = { 0 };        for (int i = 4; i >= 0; --i) {            const unsigned long quot = val / 85;            const unsigned long rem = val - quot * 85; // val % 85            val = quot;            out[i] = rem + '!';        }        if (dst_len < grplen) {            _TRACE(Info << "insufficient buffer space provided\n");            break;        }        memcpy(dst_ptr, out, grplen);        dst_ptr += grplen;        dst_len -= grplen;    }    if (dst_len < 2) {        _TRACE(Info << "insufficient buffer space provided\n");    }    else {        *dst_ptr++ = '~';        *dst_ptr++ = '>';    }    return dst_ptr - dst_buf;}END_NCBI_SCOPE/* * =========================================================================== * $Log: ascii85.cpp,v $ * Revision 1000.1  2004/06/01 19:39:50  gouriano * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.2 * * Revision 1.2  2004/05/17 21:06:02  gorelenk * Added include of PCH ncbi_pch.hpp * * Revision 1.1  2003/07/16 20:05:58  meric * Initial version * * =========================================================================== */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -