亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? base64.cpp

?? com編程
?? CPP
字號:
// Base64.cpp
/////////////////////////////////////////////////////////////////////////////
// Copyright (c) 1996-1997, Chris Sells
// All rights reserved.
//
// NO WARRANTIES ARE EXTENDED. USE AT YOUR OWN RISK.
//
// To contact the author with suggestions or comments, use
// csells@sellsbrothers.com

#include "stdafx.h"
#include "Base64.h"

#define BAD_POINTER_RETURN(p) if( !p ) return E_POINTER
#define BAD_POINTER_RETURN_OR_ZERO(p) if( !p ) return E_POINTER; else *p = 0
#define DIM(rg) (sizeof(rg)/sizeof(*rg))

// Map 6-bit byte to 8-bit character
static const char
g_szMap64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

// Map 8-bit character to 6-bit byte
#define INVALID_BYTE64  255
#define OFFSET_BYTE64   '+'
static const byte
g_byteMap64[] =
{
    62, // +
    INVALID_BYTE64,
    INVALID_BYTE64,
    INVALID_BYTE64,
    63, // /
    52, // 0
    53, // 1
    54, // 2
    55, // 3
    56, // 4
    57, // 5
    58, // 6
    59, // 7
    60, // 8
    61, // 9
    INVALID_BYTE64,
    INVALID_BYTE64,
    INVALID_BYTE64,
    INVALID_BYTE64,
    INVALID_BYTE64,
    INVALID_BYTE64,
    INVALID_BYTE64,
    0,  // A
    1,  // B
    2,  // C
    3,  // D
    4,  // E
    5,  // F
    6,  // G
    7,  // H
    8,  // I
    9,  // J
    10, // K
    11, // L
    12, // M
    13, // N
    14, // O
    15, // P
    16, // Q
    17, // R
    18, // S
    19, // T
    20, // U
    21, // V
    22, // W
    23, // X
    24, // Y
    25, // Z
    INVALID_BYTE64,
    INVALID_BYTE64,
    INVALID_BYTE64,
    INVALID_BYTE64,
    INVALID_BYTE64,
    INVALID_BYTE64,
    26, // a
    27, // b
    28, // c
    29, // d
    30, // e
    31, // f
    32, // g
    33, // h
    34, // i
    35, // j
    36, // k
    37, // l
    38, // m
    39, // n
    40, // o
    41, // p
    42, // q
    43, // r
    44, // s
    45, // t
    46, // u
    47, // v
    48, // w
    49, // x
    50, // y
    51, // z
};

// Turn up to three bytes into four characters in the range [A-Za-z0-9+/],
// using = as the padding character.
HRESULT Encode64(
    char*       rgc,   // Encoded characters
    const BYTE* rgb,   // Array of bytes to encode
    size_t      cb)    // Number of bytes to encode (1, 2 or 3)
{
    BAD_POINTER_RETURN(rgc);
    BAD_POINTER_RETURN(rgb);

    HRESULT hr = S_OK;

    // Break out three 8-bit bytes into four characters using 6-bit bytes,
    // padding with the = character should less than 3 bytes be encoded.
    switch( cb )
    {
    case 3:
        rgc[0] = g_szMap64[((rgb[0] >> 2))];
        rgc[1] = g_szMap64[((rgb[0] & 0x03) << 4) | (rgb[1] >> 4)];
        rgc[2] = g_szMap64[((rgb[1] & 0x0f) << 2) | (rgb[2] >> 6)];
        rgc[3] = g_szMap64[((rgb[2] & 0x3f))];
    break;

    case 2:
        rgc[0] = g_szMap64[((rgb[0] >> 2))];
        rgc[1] = g_szMap64[((rgb[0] & 0x03) << 4) | (rgb[1] >> 4)];
        rgc[2] = g_szMap64[((rgb[1] & 0x0f) << 2)];
        rgc[3] = '=';
    break;

    case 1:
        rgc[0] = g_szMap64[((rgb[0] >> 2))];
        rgc[1] = g_szMap64[((rgb[0] & 0x03) << 4)];
        rgc[2] = '=';
        rgc[3] = '=';
    break;

    default:
        hr = E_INVALIDARG;
    break;
    }

    return hr;
}


// Turn four characters in the range [A-Za-z0-9+/] into n bytes,
// stopping when the = padding character is reached.
HRESULT Decode64(
    BYTE*          rgb,    // Decoded bytes
    size_t*        pcb,    // Number of decoded bytes (1, 2 or 3)
    const char*    rgc)    // Array of 4 characters to decode
{
    BAD_POINTER_RETURN_OR_ZERO(pcb);
    BAD_POINTER_RETURN(rgb);
    BAD_POINTER_RETURN(rgc);

    // Translate four characters into four 6-bit bytes
    BYTE    rgbTmp[4];
    size_t  cch = 0;    // Count of characters to decode (stop at padding)
    HRESULT hr = S_OK;

    for( int i = 0; SUCCEEDED(hr) && rgc[i] != '=' && i < 4; i++ )
    {
        size_t  n = rgc[i] - OFFSET_BYTE64;
        if( n >= DIM(g_byteMap64) ||
            ((rgbTmp[i] = g_byteMap64[n]) == INVALID_BYTE64) )
        {
            hr = E_UNEXPECTED;
        }

        cch++;
    }

    if( SUCCEEDED(hr) )
    {
        // Translate 6-bit bytes into 8-bit bytes
        switch( cch )
        {
        case 4:
            rgb[0] = (rgbTmp[0] << 2) | (rgbTmp[1] >> 4);
            rgb[1] = (rgbTmp[1] << 4) | (rgbTmp[2] >> 2);
            rgb[2] = (rgbTmp[2] << 6) | (rgbTmp[3] >> 0);
            *pcb = 3;
        break;

        case 3:
            rgb[0] = (rgbTmp[0] << 2) | (rgbTmp[1] >> 4);
            rgb[1] = (rgbTmp[1] << 4) | (rgbTmp[2] >> 2);
            *pcb = 2;
        break;

        case 2:
            rgb[0] = (rgbTmp[0] << 2) | (rgbTmp[1] >> 4);
            *pcb = 1;
        break;

        default:
            hr = E_UNEXPECTED;
        break;
        }
    }

    return hr;
}


// Base64 encode a buffer of bytes where cch >= (cb/3) * 4.
HRESULT BufferEncode64(
    char*        rgc,    // Encoded array of characters
    size_t       cch,    // Size of encoding array
    const BYTE*  rgb,    // Array of bytes to encode
    size_t       cb)     // Number of bytes to encode
{
    BAD_POINTER_RETURN(rgc);
    BAD_POINTER_RETURN(rgb);

#ifdef _DEBUG
    if( cch%4 != 0 ) return E_UNEXPECTED;
    if( cch < (cb/3 * 4) ) return E_UNEXPECTED;
#endif

    HRESULT hr = S_OK;
    size_t  nRaw;
    size_t  nEncoded;

    for( nRaw = 0, nEncoded = 0;
         SUCCEEDED(hr) && (nRaw + 2) < cb;
         nRaw += 3, nEncoded += 4)
    {
        hr = Encode64(rgc + nEncoded, rgb + nRaw, 3);
    }

    // Catch the last 1 or 2 bytes
    if( SUCCEEDED(hr) )
    {
        if( cb - nRaw )
        {
            hr = Encode64(rgc + nEncoded, rgb + nRaw, cb - nRaw);
        }
    }

    return hr;
}


// Base64 decode a buffer of characters where *pcb >= (cch/4) * 3.
// NOTE: On input, *pcb is assumed to be the maximum size of rgb.
HRESULT BufferDecode64(
    BYTE*        rgb,    // Decoded array of bytes
    size_t*      pcb,    // Number of decoded bytes
    const char*  rgc,    // Array of characters to decode
    size_t       cch)    // Number of characters to decode
{
    BAD_POINTER_RETURN(pcb);
    BAD_POINTER_RETURN(rgb);
    BAD_POINTER_RETURN(rgc);

#ifdef _DEBUG
    if( *pcb < (cch/4 * 3) - 2 ) return E_UNEXPECTED;
#endif

    HRESULT hr = S_OK;
    size_t  nRaw;
    size_t  nEncoded;

    *pcb = 0;
    for( nRaw = 0, nEncoded = 0;
         SUCCEEDED(hr) && nEncoded < cch;
         nRaw += 3, nEncoded += 4)
    {
        size_t  cb;
        hr = Decode64(rgb + nRaw, &cb, rgc + nEncoded);
        *pcb += cb;
        if( cb < 3 )
        {
            break;
        }
    }

    return hr;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区在线高清| 欧美mv日韩mv亚洲| 国产精品视频你懂的| 美女看a上一区| 欧美日韩精品免费| 亚洲欧美日韩小说| 波多野结衣视频一区| 2021中文字幕一区亚洲| 日韩高清一区二区| 欧美天堂一区二区三区| 国产女主播视频一区二区| 久久精品av麻豆的观看方式| 欧美在线色视频| 亚洲激情五月婷婷| www.欧美.com| 国产精品嫩草影院com| 国产伦精品一区二区三区视频青涩| 欧美日韩精品欧美日韩精品一| 一区二区三区小说| 99国产精品视频免费观看| 亚洲国产精品黑人久久久| 成人一区二区三区视频在线观看| 91国偷自产一区二区使用方法| 亚洲男女毛片无遮挡| 色天天综合色天天久久| 伊人一区二区三区| 8x福利精品第一导航| 美日韩黄色大片| 精品国内二区三区| 国产成人精品综合在线观看| 国产欧美日韩不卡免费| 99久久亚洲一区二区三区青草| 中文字幕一区二区三区蜜月| 日本伦理一区二区| 日本午夜一区二区| 日韩精品一区二区在线| 国产suv精品一区二区883| 国产精品精品国产色婷婷| 91久久精品一区二区三区| 婷婷丁香激情综合| 日韩精品中午字幕| 成人精品高清在线| 亚洲最新在线观看| 日韩一级二级三级精品视频| 国产乱妇无码大片在线观看| 中文字幕日本乱码精品影院| 欧美偷拍一区二区| 精品一区二区在线视频| 国产精品福利在线播放| 欧美日韩视频在线第一区| 国产综合色视频| 亚洲日本va午夜在线影院| 欧美日韩三级视频| 国产精品一区二区久激情瑜伽 | 日韩区在线观看| 国产不卡高清在线观看视频| 一区二区三区四区在线播放| 精品欧美一区二区在线观看| 93久久精品日日躁夜夜躁欧美| 天天综合色天天| 欧美激情综合五月色丁香| 欧美亚洲一区三区| 国产一区欧美二区| 一二三区精品视频| 精品处破学生在线二十三| 99久久精品国产一区| 免费成人av资源网| 日韩一区中文字幕| 精品国产一区二区三区av性色| 99久久久免费精品国产一区二区 | 亚洲色图另类专区| 欧美一区二区精品在线| 成人v精品蜜桃久久一区| 日本亚洲三级在线| 日韩毛片精品高清免费| 日韩免费看的电影| 色88888久久久久久影院野外| 国产一区二区三区蝌蚪| 亚洲444eee在线观看| 国产精品色眯眯| 日韩欧美一二三四区| 91理论电影在线观看| 国产老妇另类xxxxx| 日韩va欧美va亚洲va久久| 成人欧美一区二区三区视频网页 | 91精品午夜视频| av在线这里只有精品| 狠狠久久亚洲欧美| 亚洲超碰97人人做人人爱| 国产精品网站导航| 欧美电影免费提供在线观看| 精品视频一区三区九区| 91在线国产福利| 国产精品一级二级三级| 三级欧美韩日大片在线看| 亚洲日本在线天堂| 国产精品美女一区二区在线观看| 日韩三级免费观看| 欧美亚男人的天堂| 91丨九色丨尤物| 懂色中文一区二区在线播放| 麻豆freexxxx性91精品| 亚洲一区二区五区| 亚洲精品国产无套在线观| 欧美国产禁国产网站cc| 久久久一区二区三区捆绑**| 欧美一卡二卡三卡| 欧美男人的天堂一二区| 色偷偷一区二区三区| av一区二区久久| 丁香网亚洲国际| 国产一区二区调教| 精品无人区卡一卡二卡三乱码免费卡 | 一区二区三区高清在线| www激情久久| 精品少妇一区二区三区| 日韩一区二区三区视频在线| 欧美日韩免费一区二区三区视频| 91精彩视频在线观看| 91丨porny丨国产| av在线不卡网| 99久久精品免费观看| 成人久久视频在线观看| 丁香天五香天堂综合| 成人午夜免费电影| 成人激情小说乱人伦| 成人激情黄色小说| eeuss鲁片一区二区三区在线观看| 大陆成人av片| 成年人国产精品| 91网站最新地址| 欧美性xxxxxx少妇| 欧美色电影在线| 91麻豆精品国产91久久久久 | 久久你懂得1024| 久久色.com| 国产婷婷一区二区| 国产精品青草综合久久久久99| 欧美激情艳妇裸体舞| 国产精品久久久久久久久久久免费看 | 精品国产乱码久久久久久图片| 欧美精品高清视频| 91精品久久久久久久91蜜桃| 日韩女同互慰一区二区| 精品精品国产高清一毛片一天堂| 久久综合九色综合久久久精品综合| 久久一二三国产| 国产精品无码永久免费888| 亚洲欧洲日韩女同| 一区二区三区四区国产精品| 亚洲高清不卡在线观看| 奇米色777欧美一区二区| 激情综合五月天| 国产成人午夜视频| 91偷拍与自偷拍精品| 欧美日韩和欧美的一区二区| 日韩一区二区在线免费观看| 久久女同性恋中文字幕| 国产精品美女久久久久aⅴ国产馆| 国产精品久久久久三级| 亚洲激情一二三区| 免费看日韩精品| 国产成人综合网站| 91免费视频网| 欧美肥胖老妇做爰| 久久伊人中文字幕| 亚洲色图在线视频| 婷婷亚洲久悠悠色悠在线播放| 国内精品国产成人| 91亚洲国产成人精品一区二区三| 欧美性猛片aaaaaaa做受| 欧美一级专区免费大片| 国产人成一区二区三区影院| 亚洲激情中文1区| 久久se这里有精品| 91免费看视频| 欧美一区二区福利在线| 国产精品亲子伦对白| 亚洲成人黄色影院| 国产一区二区剧情av在线| 色综合久久综合网| 欧美mv日韩mv| ㊣最新国产の精品bt伙计久久| 三级久久三级久久久| 成人午夜视频在线观看| 777午夜精品免费视频| 国产人久久人人人人爽| 午夜影院久久久| 国产91丝袜在线18| 欧美日韩大陆一区二区| 中文一区二区在线观看| 日韩精品成人一区二区三区| 丁香婷婷深情五月亚洲| 91精品国产色综合久久不卡蜜臀| 欧美国产日本韩| 日本成人在线视频网站| 不卡av免费在线观看| 日韩亚洲欧美高清| 一区二区三区在线免费视频| 国产乱人伦偷精品视频不卡|