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

📄 spnkbase64.cpp

📁 linux 下的程序源代码
💻 CPP
字号:
/* * Copyright 2008 Stephen Liu * For license terms, see the file COPYING along with this library. */#include <stdlib.h>#include <string.h>#include "spnkbase64.hpp"static const char base64o[65] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";static const char base64i[81] = "\76XXX\77\64\65\66\67\70\71\72\73\74\75XXXXXXX\00\01\02\03\04\05\06\07\10\11\12\13\14\15\16\17\20\21\22\23\24\25\26\27\30\31XXXXXX\32\33\34\35\36\37\40\41\42\43\44\45\46\47\50\51\52\53\54\55\56\57\60\61\62\63";SP_NKBase64EncodedBuffer :: SP_NKBase64EncodedBuffer( const void * plainBuffer, size_t len ){	mLength = len * 4 / 3 + 16;	mBuffer = (char*)malloc( mLength );	char * s = (char*)plainBuffer;	size_t n = len;	char * t = mBuffer;	register size_t i;	register unsigned long m;	t[0] = '\0';	for (; n > 2; n -= 3, s += 3) {		m = ((unsigned long)((unsigned char*)s)[0] << 16) |				((unsigned long)((unsigned char*)s)[1] << 8) |				(unsigned long)((unsigned char*)s)[2];		for (i = 4; i > 0; m >>= 6)			t[--i] = base64o[m & 0x3F];		t += 4;	}	t[0] = '\0';	if (n > 0) {		m = 0;		for (i = 0; i < n; i++)			m = (m << 8) | *s++;		for (; i < 3; i++)			m <<= 8;		for (i++; i > 0; m >>= 6)			t[--i] = base64o[m & 0x3F];		for (i = 3; i > n; i--)			t[i] = '=';		t[4] = '\0';	}	mLength = strlen( mBuffer );}SP_NKBase64EncodedBuffer :: ~SP_NKBase64EncodedBuffer(){	free( mBuffer );	mBuffer = NULL;}const char * SP_NKBase64EncodedBuffer :: getBuffer(){	return mBuffer;}size_t SP_NKBase64EncodedBuffer :: getLength(){	return mLength;}//-------------------------------------------------------------------SP_NKBase64DecodedBuffer :: SP_NKBase64DecodedBuffer( const char * encodedBuffer, size_t len ){	mLength = len * 3 / 4 + 16;	mBuffer = (char*)malloc( mLength );	const char * s = encodedBuffer;	char * t = mBuffer;	size_t l = len;	size_t * n = &mLength;	register int i, j, c;	register unsigned long m;	if (n) *n = 0;	for (;;) {		for (i = 0; i < 256; i++) {			m = 0;			j = 0;			while (j < 4) {				c = *s++;				if (c == '=' || !c) {					i *= 3;					switch (j)					{						case 2:							*t++ = (char)((m >> 4) & 0xFF);							i++;							break;						case 3:							*t++ = (char)((m >> 10) & 0xFF);							*t++ = (char)((m >> 2) & 0xFF);							i += 2;					}					if (n) *n += i;					return;				}				c -= '+';				if (c >= 0 && c <= 79) {					m = (m << 6) + base64i[c];					j++;				}			}			*t++ = (char)((m >> 16) & 0xFF);			*t++ = (char)((m >> 8) & 0xFF);			*t++ = (char)(m & 0xFF);			if (l < 3) {				if (n) *n += i;				return;			}			l -= 3;		}		if (n) *n += 3 * 256;	}}SP_NKBase64DecodedBuffer :: ~SP_NKBase64DecodedBuffer(){	free( mBuffer );	mBuffer = NULL;}const void * SP_NKBase64DecodedBuffer :: getBuffer(){	return mBuffer;}size_t SP_NKBase64DecodedBuffer :: getLength(){	return mLength;}

⌨️ 快捷键说明

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