void HEX2ASC(BYTE Hex, TCHAR uChar[3]) { //0-F 转换成 '0'-'F' #define BIN2TXT(x) (((x) > 9) ? ((x)-10+_T('A')) : ((x)+_T('0'))) 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"));