二进制显示文件

时间:2021-10-31 21:44:25
void CProcessDlg::OnHexShow() 
{
// TODO: Add your control notification handler code here
CFile file;
long m_lFileLength;
long lPos;
long lOffset = 0;
int m_nPerLineBytes = 16;
unsigned char szBuf[16];
int nRet;
CString sTemp,str;
CString sChars;
CString strLine;
m_szDisplay = "";

if(!file.Open(lpszFileName,CFile::modeRead | CFile::typeBinary))
{
AfxMessageBox("The file open error!");
return;
}

m_lFileLength= file.GetLength();
lPos = file.Seek(lOffset,CFile::begin);

while((nRet = file.Read(szBuf,m_nPerLineBytes)) > 0)
{
if(nRet <= 0)
{
AfxMessageBox("Read error or The file is empty!");
return;
}

sTemp.Format(_T("%0.8X:"),lPos);
strLine = sTemp;

for(int i = 0;i < nRet;i++)
{
if(i == 0)
{
sTemp.Format(_T("%2.2X"),szBuf[i]);
}
else if(i % 8 == 0)
{
sTemp.Format(_T(" - %2.2X"), szBuf[i]);
}
else
{
sTemp.Format(_T(" %2.2X"), szBuf[i]);
}
if (_istprint(szBuf[i]))
{
str.Format(_T("%-3c"),szBuf[i]);
sChars += str;
}
else
{
str.Format(_T("%-3c"),'.');
sChars += str;
}
strLine += sTemp;
}

strLine += _T(" ");
strLine += sChars;
sChars = "";
m_szDisplay = m_szDisplay + strLine + "\r\n";
lPos = file.GetPosition();
}
UpdateData(FALSE);
file.Close();
}
这是一个简单的二进制显示程序,我做的一个小工具的其中一个功能,用一个按钮激发。