Re: Displaying a Hex Dump..
"Joseph M. Newcomer" <newcomer@flounder.com> wrote in message
news:bfbdc2tksp3erpobpe10rsrvbfkv4al3lf@4ax.com...
|I forgot to add the code. (By the way, in general edit controls are a
lousy interface for
| doing displays like this, because you end up with all sorts of
problems--see my essay on
| my logging listbox control)
|
| You can do this either by subclassing the edit control or by putting the
logic in the
| dialog itself.
|
| At some point you must do code that accomplishes this task
|
| CFont * f = c_HexDump.GetFont();
| ASSERT(f != NULL);
| LOGFONT lf;
| f->GetLogFont(&lf);
| _tcscpy(lf.lfFaceName, _T("Courier New"));
| VERIFY(font.CreateFontIndirect(&lf));
| c_HexDump.SetFont(&font);
|
| where 'font' is a member variable of your dialog, and c_HexEdit is a
control type class
| member variable you create with ClassWizard and bind to your control (not
a value type
| class member variable which is the default).
|
| If you do this in the edit control, you'd put the code in the
PreSubclassWindow handler;
| if you do it in the dialog, you'd do it in OnInitDialog.
| joe
|
| On 25 Jul 2006 11:45:27 -0700, kefkastudio@gmail.com wrote:
|
| >Hi, my program displays a Hex dump in an edit box. Right now the dump
| >looks like:
| >
| >A B 2C E2 1 77 4D 3F 3F 77 E E2 B 2C 4D 3F
| >14 32 DF 4 E1 76 4 4 FF F2 25 FF 77 FF 83 D1
| >.. etc, for about a 50 lines.
| >
| >What would be a good way to align these so they look organized?
| >
| >Thx!
| >kefkastudio
Looks like a hot topic these days - after you get your fixed pitch font
selected as Joe has suggested, use this code snippet to do the actual
formatting:
void HexFormat (CString& cStr, BYTE * pBuf, int nBytes)
{
if(!nBytes || NULL == pBuf)
return;
int i, x, len;
// <layout> 0 1 2 3 4 5
6 7 8
// <layout>
012345678901234567890123456789012345678901234567890123456789012345678901234567890
TCHAR szHdr[] = "Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
0123456789ABCDEF\r\n";
len = strlen(szHdr) * ((nBytes / 16) + 1);
cStr.Empty();
LPTSTR pszFmt = cStr.GetBuffer(len);
memset(pszFmt, 0, len);
strcpy(pszFmt, szHdr);
pszFmt += strlen(szHdr);
BYTE b;
TCHAR szHex[] = "0123456789ABCDEF";
// Now format the data for viewing:
for(i = 0; i < nBytes; i += 16)
{
// Format the offset field
// Offset
sprintf(pszFmt, "%08X ", i);
pszFmt += strlen(pszFmt);
// Format the hex portion of the line
for(x = 0; x < 16 && (i + x) < nBytes; x++)
{
b = pBuf[i + x];
*pszFmt++ = szHex[(b & 0xF0) >> 4];
*pszFmt++ = szHex[b & 0x0F];
*pszFmt++ = ' ';
}
strcat(pszFmt, " ");
pszFmt += 3;
// Filter data to ASCII
for(x = 0; x < 16 && (i + x) < nBytes; x++)
*pszFmt++ = pBuf[i + x] < ' ' ? '.' : pBuf[i + x];
// Line break
*pszFmt++ = '\r';
*pszFmt++ = '\n';
*pszFmt = '\0';
if(i + x >= nBytes)
break; // Done
}
cStr.ReleaseBuffer();
}
-- Ed.
-----------------------------------------------------
Less than a week after Ken Lay's death, and hell was already declaring
bankruptcy...
F9E7707A2AF502D0A899C6ACB43A2D35EB7E->bin->b64