?? gfl.cpp
字號:
// GfL.cpp: implementation of the CGfL class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "MixedCS.h"
#include "GfL.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
///////////////////////////////////////////////////////////////////////////////
// CGfL Functions
///////////////////////////////////////////////////////////////////////////////
#define CHECK(x) {if( !(x) ) return false;}
/******************************************************************************/
// 名稱:Transform
// 功能:變換
// 參數(shù):
// 返回:變換成功返回true,否則返回false
// 備注:
// 更新:2002/12/25
// 作者:0200980胡德華
/******************************************************************************/
bool CGfL::Transform(bool *Out,bool *In,const char *Table,UINT len)
{
static bool Tmp[128];
CHECK( Out && In && Table && len<=128 )
for(UINT i=0; i<len; ++i)
{
// 注意必須是 Table[i]-1,因?yàn)楸碇械钠鹗嘉粸?,而C語言中的數(shù)組下標(biāo)從0開始
Tmp[i] = In[ Table[i]-1 ];
}
memcpy(Out,Tmp,len);
return true;
}
/******************************************************************************/
// 名稱:RotateL
// 功能:循環(huán)左移
// 參數(shù):len—移動數(shù)據(jù)的長度;loop—循環(huán)左移的長度
// 返回:左移成功返回true,否則返回false
// 備注:
// 更新:2002/12/25
// 作者:0200980胡德華
/******************************************************************************/
bool CGfL::RotateL(char *In,UINT len,UINT loop)
{
static char Tmp[256];
CHECK( In && len && (loop%=len)<=256 )
memcpy(Tmp,In,loop);
memcpy(In,In+loop,len-loop);
memcpy(In+len-loop,Tmp,loop);
return true;
}
/******************************************************************************/
// 名稱:Xor
// 功能:異或
// 參數(shù):
// 返回:異或成功返回true,否則返回false
// 備注:
// 更新:2002/12/25
// 作者:0200980胡德華
/******************************************************************************/
bool CGfL::Xor(bool *InA,const bool *InB,UINT len)
{
CHECK( InA && InB )
for(UINT i=0; i<len; ++i)
{
InA[i] ^= InB[i];
}
return true;
}
/******************************************************************************/
// 名稱:ByteToBit
// 功能:將字節(jié)組轉(zhuǎn)換成位組
// 參數(shù):len—字節(jié)組長度;num—一個字節(jié)轉(zhuǎn)換成幾個位字節(jié)
// 返回:轉(zhuǎn)換成功返回true,否則返回false
// 備注:
// 更新:2002/12/25
// 作者:0201005劉紅旗
/******************************************************************************/
bool CGfL::ByteToBit(bool *Out,const char *In,UINT len,UINT num)
{
CHECK( Out && In && num<=8 )
for(UINT i=0,j; i<len; ++i,Out+=num)
{
for(j=0; j<num; ++j)
{
Out[j] = (In[i]>>j) & 1;
}
}
return true;
}
/******************************************************************************/
// 名稱:BitToByte
// 功能:將位組轉(zhuǎn)換成字節(jié)組
// 參數(shù):len—位組長度;num—幾個位字節(jié)轉(zhuǎn)換成一個字節(jié)
// 返回:轉(zhuǎn)換成功返回true,否則返回false
// 備注:
// 更新:2002/12/25
// 作者:0201005劉紅旗
/******************************************************************************/
bool CGfL::BitToByte(char *Out,const bool *In,UINT len,UINT num)
{
CHECK( Out && In )
memset(Out,0,(len+num-1)/num);
for(UINT i=0,j,L=len/num; i<L; ++i,In+=num)
{
for(j=0; j<num; ++j)
{
Out[i] |= In[j]<<j;
}
}
for(j=0; j<len%num; ++j)
{
Out[i] |= In[j]<<j;
}
return true;
}
/******************************************************************************/
// 名稱:HalfByteToByte
// 功能:將半字節(jié)組轉(zhuǎn)換成字節(jié)組
// 參數(shù):
// 返回:轉(zhuǎn)換成功返回true,否則返回false
// 備注:
// 更新:2002/12/25
// 作者:0201005劉紅旗
/******************************************************************************/
bool CGfL::HalfByteToByte(char *Out,const char *In,UINT len)
{
CHECK( Out && In )
for(UINT i=0,j=len>>1; i<j; ++i)
{
*Out = In[0];
*Out |= In[1]<<4;
++Out; In += 2;
}
if( len%2 )
*Out = *In;
return true;
}
/******************************************************************************/
// 名稱:ByteToHalfByte
// 功能:將字節(jié)組轉(zhuǎn)換成半字節(jié)組
// 參數(shù):
// 返回:轉(zhuǎn)換成功返回true,否則返回false
// 備注:
// 更新:2002/12/25
// 作者:0201005劉紅旗
/******************************************************************************/
bool CGfL::ByteToHalfByte(char *Out,const char *In,UINT len)
{
CHECK( Out && In )
for(UINT i=0; i<len; ++i)
{
Out[0] = (*In)&0xf;
Out[1] = ((*In)>>4)&0xf;
Out += 2; ++In;
}
return true;
}
/******************************************************************************/
// 名稱:StrToHalfByte
// 功能:將字符串轉(zhuǎn)換成半字節(jié)組
// 參數(shù):
// 返回:合法字符('0'-'9','A'-'F')的個數(shù)
// 備注:
// 更新:2002/12/25
// 作者:0201005劉紅旗
/******************************************************************************/
int CGfL::StrToHalfByte(char *Out,char *In,UINT len)
{
CHECK( Out && In )
for(UINT i=0,j=0; i<len; ++i)
{
if( (In[i]>='0') && (In[i]<='9') )
Out[j++] = In[i]-'0';
else if( (In[i]>='A') && (In[i]<='F') )
Out[j++] = In[i]-'A'+10;
else if( (In[i]>='a') && (In[i]<='f') )
Out[j++] = In[i]-'a'+10;
}
return j;
}
/******************************************************************************/
// 名稱:HalfByteToStr
// 功能:將半字節(jié)組轉(zhuǎn)換成字符串
// 參數(shù):
// 返回:合法數(shù)(0-15)的個數(shù)
// 備注:
// 更新:2002/12/25
// 作者:0201005劉紅旗
/******************************************************************************/
int CGfL::HalfByteToStr(char *Out,char *In,UINT len)
{
CHECK( Out && In )
for(UINT i=0,j=0; i<len; ++i)
{
if( (In[i]>=0) && (In[i]<10) )
Out[j++] = In[i]+'0';
else if( (In[i]>9) && (In[i]<16) )
Out[j++] = In[i]-10+'A';
}
Out[j] = '\0';
return j-1;
}
///////////////////////////////////////////////////////////////////////////////
// End of Files
///////////////////////////////////////////////////////////////////////////////
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -