社区
网络及通讯开发
帖子详情
请教IdBase64Encoder
zjlxl
2004-03-31 07:01:02
那位大侠知道IdBase64Encoder用法,我看了半天帮助还是不对
...全文
102
2
打赏
收藏
请教IdBase64Encoder
那位大侠知道IdBase64Encoder用法,我看了半天帮助还是不对
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
csmiori
2004-04-02
打赏
举报
回复
我看不太明白!
有没有具体这方面的资料!我想对IdBase64Encoder,IdBase64Decoder两个组件的用法学一下。谢谢!有的话请发送到我的邮箱里:csmiori@hotmail.com
cuiyu616ok
2004-04-01
打赏
举报
回复
下面这段代码对你有用马?
// MIME & BASE64 Encode/Decode unit. (CPP)
// Copyright (c) 2000 Mental Studio - http://mentals.126.com
// Author : Raptor - raptorz@126.com
#pragma hdrstop
#include "mimeb64.h"
#pragma package(smart_init)
// 4bit binary to char 0-F
char Hex2Chr( Byte n )
{
n &= 0xF;
if ( n < 10 )
return ( char )( n + '0' );
else
return ( char )( n - 10 + 'A' );
}
// char 0-F to 4bit binary
Byte Chr2Hex( char c )
{
c = toupper( c );
if ( c >= '0' && c <= '9' )
return ( int )( c - '0' );
else if ( c >= 'A' && c <= 'F' )
return ( int )( c - 'A' + 10 );
else
return -1;
}
// Base64 code table
// 0-63 : A-Z(25) a-z(51), 0-9(61), +(62), /(63)
char __fastcall Base2Chr( Byte n )
{
n &= 0x3F;
if ( n < 26 )
return ( char )( n + 'A' );
else if ( n < 52 )
return ( char )( n - 26 + 'a' );
else if ( n < 62 )
return ( char )( n - 52 + '0' );
else if ( n == 62 )
return '+';
else
return '/';
}
Byte Chr2Base( char c )
{
if ( c >= 'A' && c <= 'Z' )
return ( Byte )( c - 'A' );
else if ( c >= 'a' && c <= 'z' )
return ( Byte )( c - 'a' + 26 );
else if ( c >= '0' && c <= '9' )
return ( Byte )( c - '0' + 52 );
else if ( c == '+' )
return 62;
else
return 63;
}
AnsiString MimeEncode( AnsiString s )
{
AnsiString asTemp = "";
int i = 1, n = s.Length( );
while ( i <= n )
{
asTemp += '=';
asTemp += Hex2Chr( ( Byte )( s[i] >> 4 ) );
asTemp += Hex2Chr( ( Byte )( s[i] ) );
i++;
}
return asTemp;
}
//---------------------------------------------------------------------------
//
AnsiString MimeDecode( AnsiString s )
{
AnsiString asTemp = "";
int i = 1, n = s.Length( );
Byte ch, cl; // 因为有些软件(e.g.Foxmail)对一些 < 0x7f 的字符不编码,此函数作了一些修改
while ( i <= n )
{
if ( ( s[i] == '=' ) && ( i + 2 <= n ) )
{
ch = Chr2Hex( s[i + 1] );
cl = Chr2Hex( s[i + 2] );
if ( ( ch == ( Byte )-1 ) || ( cl == ( Byte )-1 ) )
asTemp += s[i]; // 未编码的'='
else
{
asTemp += ( char )( ( ch << 4 ) | cl );
i += 2;
}
}
else
asTemp += s[i]; // 未编码的字符
i++;
}
return asTemp;
}
//
AnsiString Base64Encode( AnsiString s )
{
int n = s.Length( );
Byte c, t;
AnsiString asTemp = "";
for ( int i = 1; i <= n; i++ )
{
c = s[i];
if ( i % 3 == 1 )
{
asTemp += Base2Chr( c >> 2 );
t = ( c << 4 ) & 0x3F;
}
else if ( i % 3 == 2 )
{
asTemp += Base2Chr( t | ( c >> 4 ) );
t = ( c << 2 ) & 0x3F;
}
else
{
asTemp += Base2Chr( t | ( c >> 6 ) );
asTemp += Base2Chr( c );
}
}
if ( n % 3 != 0 )
{
asTemp += Base2Chr( t );
if ( n % 3 == 1 )
asTemp += "==";
else
asTemp += "=";
}
return asTemp;
}
//
AnsiString Base64Decode( AnsiString s )
{
int n = s.Length( );
Byte c, t;
AnsiString asTemp = "";
for ( int i = 1; i <= n; i++ )
{
if ( s[i] == '=' )
break;
c = Chr2Base( s[i] );
if ( i % 4 == 1 )
t = c << 2;
else if ( i % 4 == 2 )
{
asTemp += ( char )( t | ( c >> 4 ) );
t = ( Byte )( c << 4 );
}
else if ( i % 4 == 3 )
{
asTemp += ( char )( t | ( c >> 2 ) );
t = ( Byte )( c << 6 );
}
else
asTemp += ( char )( t | c );
}
return asTemp;
}
//上面的代码是拿别人的
//下面的代码为invalid自己完成
//invalid@21cn.com
AnsiString UnQPCode(AnsiString QPString)
{
AnsiString Result = "";
int iLength = QPString.Length();
for(int i=1;i <= iLength;i++)
{
if((QPString[i]=='=')&&(i+2<=iLength)
&& (((QPString[i+1]>='A') && (QPString[i+1]<='F'))||((QPString[i+1]>='0') && (QPString[i+1]<='9')))
&& (((QPString[i+2]>='A') && (QPString[i+2]<='F'))||((QPString[i+2]>='0') && (QPString[i+2]<='9')))
)
{
Result += String(char(StrToInt("0X"+QPString.SubString(i+1,2))));
i+=2;
}
else
Result +=QPString[i];
}
return Result;
}
//解决Indy 的POP组件收到的主题和发信人编码错乱问题
//
AnsiString UnCodeBase(AnsiString str)
{
//=?us-ascii?q?com?= =?us-ascii?q?=2E?= =?us-ascii?q?cn?= from server TS1/THOUGHT.COM.CN. Check
String result="";
String code="";
String flag="";
int iPos1=0,iPos2,iPos3,iPos4=0;
while(str.Length()>0)
{
iPos1=0;
iPos2=0;
iPos3=0;
iPos4=0;
iPos1 = str.Pos("=?");
iPos2 = str.SubString(iPos1+2,str.Length()-iPos1-1).Pos("?");
if(iPos2>0)
{
iPos2+=iPos1+1;
iPos3 = str.SubString(iPos2+1,str.Length()-iPos2).Pos("?");
if(iPos3>0)
{
iPos3+=iPos2;
iPos4 = str.SubString(iPos3+1,str.Length()-iPos3).Pos("?=");
if(iPos4>0)
iPos4+=iPos3;
}
}
if(iPos1==0||iPos4==0||iPos2==0||iPos3==0||(iPos1+1)>iPos2||(iPos2+1)>iPos3||(iPos3+1)>iPos4)
{
result+=str;
break;
}
//注释掉就忽略掉两段编码之间的内容。
// if(iPos1>1)
// result+=str.SubString(1,iPos1-1);
if(str.SubString(iPos2+1,iPos3-iPos2-1).UpperCase() == "Q")
{
result+=UnQPCode(str.SubString(iPos3+1,iPos4-iPos3-1));
}
else if(str.SubString(iPos2+1,iPos3-iPos2-1).UpperCase() == "B")
{
result+=Base64Decode(str.SubString(iPos3+1,iPos4-iPos3-1));
}
else
result+=str.SubString(iPos3+1,iPos4-iPos3-1);
str = str.SubString(iPos4+2,str.Length()-iPos4-1);
}
return result;
}
AnsiString UnCode(AnsiString str)
{
AnsiString temp = str;
AnsiString result="";
int iPos=0;
TStringList *sl = new TStringList;
while(temp.Length()>0)
{
iPos = temp.Pos("\n");
if(iPos>0)
{
sl->Add(temp.SubString(1,iPos-1).Trim());
temp=temp.SubString(iPos+1,temp.Length()-iPos).Trim();
}
else
{
sl->Add(temp.Trim());
break;
}
}
for(int i=0;i<sl->Count;i++)
{
result+=UnCodeBase(sl->Strings[i]);
}
delete sl;
return result;
}
BASE64
Encode
编码,jar包(源代码打包)
BASE64
Encode
编码,在andor
id
没有这个编码,这里面有打成jar包,可以导进去。用源代码打包的。手懒不愿意自己弄得话,可以下载导进去。里面附带着源代码,也可将源代码开进去直接使用,希望能帮助大家。
Id
Base64
Decoder用法
vo
id
__fastcall TForm1::Button1Click(TObject *Sender) { this->
Id
Base64
Encode
r1->CodeString(Edit1->Text); Edit2->Text = this->
Id
Base64
Encode
r1->CompletedInput(); Edit2->Text = this->Edit2->Text.Del
indy
base64
encode
decode
vo
id
__fastcall TForm1::Button1Click(TObject *Sender) {
Id
Base64
Encode
r1->CodeString(Memo1->Text); AnsiString s =
Id
Base64
Encode
r1->CompletedInput(); int pos = s.Pos(";"); Memo2->Text = s
BASE64
Encode
r依赖的jar包配置方式
Base64
是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便。在实际应用上,
Base64
除了能将Binary资料可视化之外,也常用来表示字串加密过后的内容。 问题来源 此时 无法使用
BASE64
Encode
r 因为
BASE64
Encode
r是依赖suan 公司提供的jar包的sun.misc.
BASE64
Encode
r 而
BASE64
Encode
r和
BASE64
Decoder两个方法都是sun公司的内部方法,并没有在Java
BASE64
Encode
r编译时报错,解决方案
Eclipse中无法接使用sun.misc.
BASE64
Encode
r,一招教你100%解决! 导入新的项目到自己的Eclipse中,发现所有用到
BASE64
Encode
r的地方都是编译报错, 一片飘红,比如定义
BASE64
Encode
r
encode
r = new
BASE64
Encode
r(); 时。 网上说是JDK版本不一样引起的错误,建议修改代码,运用为继JDK1.8之后新 的java.util.
Base64
包来解决问题,但是我的本意不是要以跟改代码为代价解决报错,公司的项目中 这些..
网络及通讯开发
1,317
社区成员
8,874
社区内容
发帖
与我相关
我的任务
网络及通讯开发
C++ Builder 网络及通讯开发
复制链接
扫一扫
分享
社区描述
C++ Builder 网络及通讯开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章