#pragma once
#include "BinaryData.h"

class CBase64  
{
public:
	//////////////////////////////////////////////////////////////////////
	// BinaryData <-> Hex
	//////////////////////////////////////////////////////////////////////
	//!	エンコード(Bin->Hex)
	static void EncodeHEXbin(CBinaryData &src, CString &dest);

	//!	デコード(Hex->Bin)
	static int DecodeHEXbin(CString src, CBinaryData &dest);

	//////////////////////////////////////////////////////////////////////
	// BinaryData <-> B64
	//////////////////////////////////////////////////////////////////////
	//!	エンコード(Bin->B64)
	static void Encode64bin(CBinaryData &src, CString &dest);

	//!	デコード(B64->Bin)
	static void Decode64bin(CString src, CBinaryData &dest);

	//////////////////////////////////////////////////////////////////////
	// String <-> B64
	//////////////////////////////////////////////////////////////////////
	//!	エンコード（Text->B64）
	static CString Encode64(CString string);

	//!	デコード（B64->Text）
	static CString Decode64(CString b64str);

private:
	//!	16進数文字に変換(1文字ずつ変換）
	static TCHAR GetHexChar(int val);

	//!	16進数文字を数字に(1文字ずつ変換)
	static int GetHexVal(TCHAR hex);

	static int GetEncodedLength(int len);
	static int _Encode(char *encoded,const unsigned char *string, int len);
	static int GetDecodedLength(const char *bufcoded);
	static int _Decode(unsigned char *bufplain,const char *bufcoded);
};

