uChar[0] = BIN2TXT(Hex>>4);//高四位
uChar[1] = BIN2TXT(Hex&0x0F);//低四位
uChar[2] = 0;//结束
}
BYTE ASC2HEX(const TCHAR uChar[3])
{
BYTE Hex;
#define ASSERTISHEXASC(x) ASSERT(((x)>=_T('0') && (x)<=_T('9'))\
||((x)>=_T('A') && (x)<=_T('F'))\
||((x)>=_T('a') && (x)<=_T('f')))
ASSERTISHEXASC(uChar[0]);//判断数据是否合法 '0'-'9' 'A'-'F' 'a'-'f'
ASSERTISHEXASC(uChar[1]);//判断数据是否合法 '0'-'9' 'A'-'F' 'a'-'f'
#define TXT2BIN(x) (((x)>=_T('0') && (x)<=_T('9'))? ((x)-_T('0')):\
(((x)>=_T('A') && (x)<=_T('F'))? ((x)-_T('A')+10) : ((x)-_T('a')+10)))
Hex = (TXT2BIN(uChar[0]))<<4; //高四位
Hex |= (TXT2BIN(uChar[1])); //低四位
return Hex;
}
ULONGLONG ConvBin2Txt(LPCTSTR pszSrcFile, LPCTSTR pszDstFile, int nPerLineByteCount=16)
{
ULONGLONG nCount = 0; //转换计数器
BYTE nBin, nTxt[2]; //转换BUFF
BYTE nNewLine[] = { '/r', '/n' }; //回车换行
try
{
CFile srcFile(pszSrcFile, CFile::modeRead); //打开源文件
CFile dstFile(pszDstFile, CFile::modeCreate|CFile::modeReadWrite); //打开目标文件
while( srcFile.Read(&nBin, 1) == 1) //读入1字节
{
#define BIN2TXT(x) (((x) > 9) ? ((x)+'A'-10) : ((x)+'0')) //0-F 转换成 '0'-'F'
nTxt[0] = BIN2TXT(nBin>>4); nTxt[1] = BIN2TXT(nBin & 0x0F); //高低4位分别转换
dstFile.Write(nTxt, 2); //写入目标文件
nCount++; //累加转换字节
if(nCount % nPerLineByteCount == 0)//满足没行字节数
dstFile.Write(nNewLine, 2); //写入回车换行
}
srcFile.Close();//关闭源文件
nBin = 0;
dstFile.Write(&nBin, 1); //写入0 结束文本
dstFile.Close(); //关闭目标文件
}
catch (CFileException* e) //捕获异常
{
e->ReportError();//报告异常
e->Delete();//清理异常
}
return nCount; //返回转换字节数
}
//测试代码
ConvBin2Txt( _T("C://xxxx.pcm"), _T("C://1.txt"));