Нужна процедура, получающая на входе двоичный буфер и выдающая на консоль красивую распечатку как в любом хекс-редакторе, чтоб слева хекскоды, справа символы, по 0x10 штук в строке. Виндовс, си. Заранее спасибо.
Код (Text): Offset = 0; for (int i=0; i<=DataSize-1; i++) { if (i%16 == 0) printf("%08x ", Offset); printf("%02X ", Data[i]); if (!((i+1)%16)) { printf(" "); for (int j=15; j>=0; j--) printf("%c", (Data[i-j] < ' ')?'.':Data[i-j]); printf("\n"); } Offset++; }
rmn Работать будет, вот только с одни но ! Очень медленно, закинте хотя бы метр , и можно смело идти пить чай Squash Так что делаем по похожему алгоритму только изайем буффер, соответсвенно форммулируем строку сразу.
shchetinin Ну конечно, небольшая доработка напильником нужна. Это же просто пример Так же следует добавить заполнение пробелами пустых позиций, если размер данных не кратен 16-ти
Код (Text): void HexDumpQLine(BYTE* pBuf,DWORD dwSize,DWORD dwStart,FILE* pOut) { const int BLOCK_SIZE = 0x10; // One Line DWORD dwOfs = dwStart - (dwStart % 16); if (IsBadReadPtr(pBuf + dwOfs,BLOCK_SIZE * 5)) { return; } while (dwOfs < (dwStart + BLOCK_SIZE * 4)) { fprintf(pOut,"%08X: ",dwOfs); for (int ii = 0; ii < BLOCK_SIZE; ++ii) { if ((dwOfs + ii) < dwSize) { fprintf(pOut," %02X",pBuf[dwOfs + ii]); } else { fprintf(pOut," "); } } fprintf(pOut," "); for (ii = 0; ii < BLOCK_SIZE; ++ii) { BYTE byChr = pBuf[dwOfs + ii]; if ((dwOfs + ii) < dwSize) { fprintf(pOut,"%c",IsPrintable(byChr) ? byChr : '.'); } else { fprintf(pOut," "); } } fprintf(pOut,"\n"); dwOfs += BLOCK_SIZE; } }