📄 xhexcode.cpp
字号:
OutBuffer.ensureCapacity( DataCount /2 +1 );
const XChar * btData = (const XChar *)srcData;
int iFree = DataCount / 2;
for(int i=0; i<iFree; i++)
{
XByte btTmp1 = 0, btTmp2 = 0;
XChar ch1 = * btData++;
XChar ch2 = * btData++;
if( ch1 <= '9' && ch1 >='0' ) btTmp1 = (XByte)(ch1 - '0');
else if( ch1 <= 'F' && ch1 >= 'A' ) btTmp1 = (XByte)(ch1 - 'A' + 10);
else if( ch1 <= 'f' && ch1 >='a' ) btTmp1 = (XByte)(ch1 -'a' + 10);
else if(bBreakByError) return;
if( ch2 <= '9' && ch2 >='0' ) btTmp2 = (XByte)(ch2 - '0');
else if( ch2 <= 'F' && ch2 >= 'A' ) btTmp2 = (XByte)(ch2 - 'A' + 10);
else if( ch2 <= 'f' && ch2 >='a' ) btTmp2 = (XByte)(ch2 -'a' + 10);
else if(bBreakByError) return;
OutBuffer.AppendByte( (XByte)((btTmp1 << 4) | btTmp2) );
}
}
/*
////////////////////////////////////////////////////////////////////////////////
[Name]Decode
[Title]将16进制数据串解码,并放到缓冲区中
////////////////////////////////////////////////////////////////////////////////
[Param]
<cconst AnsiString &>srcData 源数据,将被解码的16进制串数据
<int>DataCount 数据源的字节数
<XByteBuffer &>OutBuffer 解码后,存放数据组的缓冲区
<bool default = true>bBreakByError 表示遇到错误非十六进制字符是否退出返回,true则表示退出返回,
false则将数据视为0继续解码
[Return]
void
[Exception]
EOutOfMemory 如果申请缓冲区失败,那么则抛出该异常
[Description]
将16进制数据串解码,并放到缓冲区中。
[Version]1.0
[Author]Rex Winter
[Date]2005-6-24
////////////////////////////////////////////////////////////////////////////////
*/
void XHexCode::Decode(const AnsiString & srcData,XByteBuffer & OutBuffer,bool bBreakByError)
{
Decode((const void *)srcData.c_str(),srcData.Length(),OutBuffer,bBreakByError);
}
/*
////////////////////////////////////////////////////////////////////////////////
[Name]Decode
[Title]将16进制数据串解码,并放到缓冲区中
////////////////////////////////////////////////////////////////////////////////
[Param]
<const XByteBuffer &>srcData 源数据,将被解码的16进制串数据
<int>DataCount 数据源的字节数
<XByteBuffer &>OutBuffer 解码后,存放数据组的缓冲区
<bool default = true>bBreakByError 表示遇到错误非十六进制字符是否退出返回,true则表示退出返回,
false则将数据视为0继续解码
[Return]
void
[Exception]
EOutOfMemory 如果申请缓冲区失败,那么则抛出该异常
[Description]
将16进制数据串解码,并放到缓冲区中。
[Version]1.0
[Author]Rex Winter
[Date]2005-6-24
////////////////////////////////////////////////////////////////////////////////
*/
void XHexCode::Decode(const XByteBuffer & srcData,XByteBuffer & OutBuffer,bool bBreakByError)
{
Decode(srcData.Data(),srcData.Length,OutBuffer,bBreakByError);
}
/*
////////////////////////////////////////////////////////////////////////////////
[Name]Decode
[Title]将16进制数据串解码,并放到缓冲区中
////////////////////////////////////////////////////////////////////////////////
[Param]
<const void *>srcData 源数据,将被解码的16进制串数据
<int>DataCount 数据源的字节数
<XByteBuffer &>OutBuffer 解码后,存放数据组的缓冲区
<bool default = true>bBreakByError 表示遇到错误非十六进制字符是否退出返回,true则表示退出返回,
false则将数据视为0继续解码
[Return]
<AnsiString> 返回解码压的字符串
[Exception]
EOutOfMemory 如果申请缓冲区失败,那么则抛出该异常
[Description]
将16进制数据串解码,并放到缓冲区中。
[Version]1.0
[Author]Rex Winter
[Date]2005-6-24
////////////////////////////////////////////////////////////////////////////////
*/
AnsiString XHexCode::Decode(const void * srcData,int DataCount,bool bBreakByError)
{
XByteBuffer OutBuffer;
OutBuffer.ensureCapacity( DataCount /2 +1 );
Decode(srcData,DataCount,OutBuffer,bBreakByError);
OutBuffer.AppendChar(0);
return (const char *)OutBuffer.Data();
}
/*
////////////////////////////////////////////////////////////////////////////////
[Name]Decode
[Title]将16进制数据串解码,并放到缓冲区中
////////////////////////////////////////////////////////////////////////////////
[Param]
<const AnsiString &>srcData 源数据,将被解码的16进制串数据
<int>DataCount 数据源的字节数
<XByteBuffer &>OutBuffer 解码后,存放数据组的缓冲区
<bool default = true>bBreakByError 表示遇到错误非十六进制字符是否退出返回,true则表示退出返回,
false则将数据视为0继续解码
[Return]
<AnsiString> 返回解码压的字符串
[Exception]
EOutOfMemory 如果申请缓冲区失败,那么则抛出该异常
[Description]
将16进制数据串解码,并放到缓冲区中。
[Version]1.0
[Author]Rex Winter
[Date]2005-6-24
////////////////////////////////////////////////////////////////////////////////
*/
AnsiString XHexCode::Decode(const AnsiString & srcData,bool bBreakByError)
{
XByteBuffer OutBuffer;
OutBuffer.ensureCapacity( srcData.Length() / 2 + 1 );
Decode(srcData,OutBuffer,bBreakByError);
OutBuffer.AppendChar(0);
return (const char *)OutBuffer.Data();
}
/*
////////////////////////////////////////////////////////////////////////////////
[Name]Decode
[Title]将16进制数据串解码,并放到缓冲区中
////////////////////////////////////////////////////////////////////////////////
[Param]
<const XByteBuffer &>srcData 源数据,将被解码的16进制串数据
<int>DataCount 数据源的字节数
<XByteBuffer &>OutBuffer 解码后,存放数据组的缓冲区
<bool default = true>bBreakByError 表示遇到错误非十六进制字符是否退出返回,true则表示退出返回,
false则将数据视为0继续解码
[Return]
<AnsiString> 返回解码压的字符串
[Exception]
EOutOfMemory 如果申请缓冲区失败,那么则抛出该异常
[Description]
将16进制数据串解码,并放到缓冲区中。
[Version]1.0
[Author]Rex Winter
[Date]2005-6-24
////////////////////////////////////////////////////////////////////////////////
*/
AnsiString XHexCode::Decode(const XByteBuffer & srcData,bool bBreakByError)
{
XByteBuffer OutBuffer;
OutBuffer.ensureCapacity( srcData.Length /2 + 1 );
Decode(srcData,OutBuffer,bBreakByError);
OutBuffer.AppendChar(0);
return (const char *)OutBuffer.Data();
}
/*
////////////////////////////////////////////////////////////////////////////////
[Name]__EncodeToBuffer
[Title]将一个Byte数据转换成十六进制字符并到缓冲区中
////////////////////////////////////////////////////////////////////////////////
[Param]
<const XByte>btTmp 源数据,将被编码的字节
<XByteBuffer &>OutBuffer 存放数据的缓冲区
<bool default = true>bCase 表示生成十六进制串的大小写,true表示为大写,false表示为小写
[Return]
<void>
[Exception]
EOutOfMemory 如果申请缓冲区失败,那么则抛出该异常
[Description]
将一个Byte数据转换成十六进制字符并到缓冲区中
[Version]1.0
[Author]Rex Winter
[Date]2005-6-24
////////////////////////////////////////////////////////////////////////////////
*/
void XHexCode::__EncodeToBuffer(const XByte btTmp,XByteBuffer & OutBuffer,bool bCase)
{
OutBuffer.ensureCapacity( OutBuffer.GetLength() + 2 );
if( bCase )
{
XByte bt1 =(XByte)(btTmp & 0x0f);
XByte bt2 =(XByte)(btTmp >> 4);
if( bt2 < 10 ) OutBuffer.AppendChar((XChar)('0'+bt2));
else OutBuffer.AppendChar((XChar)('A'-10+bt2));
if( bt1 < 10 ) OutBuffer.AppendChar((XChar)('0'+bt1));
else OutBuffer.AppendChar((XChar)('A'-10+bt1));
}
else
{
XByte bt1 =(XByte)(btTmp & 0x0f);
XByte bt2 =(XByte)(btTmp >> 4);
if( bt2 < 10 ) OutBuffer.AppendChar((XChar)('0'+bt2));
else OutBuffer.AppendChar((XChar)('a'-10+bt2));
if( bt1 < 10 ) OutBuffer.AppendChar((XChar)('0'+bt1));
else OutBuffer.AppendChar((XChar)('a'-10+bt1));
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -