Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Vector Гость
|
Добавлено: Пт Авг 27 2004 12:10 Заголовок сообщения: Срочно нужен совет по .NET (richTextBox) |
|
|
Проблема такая...
Мне требуется построить 16-ричный dump exe файла. Вот я его считал в массив Byte[n], где n у меня получилось приблизительно 27 000 000.
И вот здесь то и начинаются проблемы.
Во-первых Byte[3] == 0, что означает конец строки, поэтому Convert::ToString(b) мне выдаст строчку из трех символов. Пробовал простой перебор всех значений b на предмет существования символа 0. Сами понимаете, сколько времени это занимает. Отсюда вопрос: существует ли какой-нить быстрый алгоритм построения 16-ричного dump-а?
Во-вторых загнав всю эту информацию в richTextBox, который располагается на форме с изменяющимися размерами, я жду в районе нескольких минут пока форма меняет ширину. Уж что этот компонент пытается там делать, не знаю, но факт налицо. Поэтому вопрос второй собственно и заключается в том, как решить эту проблему.
Использовать, видимо, нужно именно RichTextBox, поскольку мне придется менять цвета отдельных блоков текста.
Заранее благодарен за вразумительные ответы. |
|
Вернуться к началу |
|
|
dAnIK SeNT
Зарегистрирован: 11.06.2004 Сообщения: 43 Откуда: Казань
|
Добавлено: Пт Авг 27 2004 13:37 Заголовок сообщения: |
|
|
2Vector
Я не понял - ты 16-ричный дамп хочешь получить?
Тогда зачем перефигачивать массив в строку?
Тебе надо побайтово просмотреть массив, преобразовав каждый элемент массива в два символа - две шестнадцатеричных цифры.
Встретил символ с кодом 0 - получил на выходе строку "00"
Или я чего-то не понял? _________________ Cисадмин - образ жизни. Программист - диагноз... |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Пт Авг 27 2004 19:08 Заголовок сообщения: |
|
|
Дело в том, что мне этот Dump еще надо в RichTextBox-е показать.
В общем я вот так делаю
FileStream* fs = File::Open(OpenFileDlg->FileName, FileMode::Open);
Byte b[] = new Byte[fs->Length];
int ReadLen = fs->Read(b,0,fs->Length);
int Row = 0;
while (Row < ReadLen/16)
{
RichTextBoxDump->AppendText(Convert::ToString(Row, 16));
AppendText(" ");
for (int i=0; i<16; i++)
{
RichTextBoxDump->AppendText(Convert::ToString(b[Row*16+i], 16));
RichTextBoxDump->AppendText(" ");
if (i%7==0) RichTextBoxDump->AppendText(" ");
}
RichTextBoxDump->AppendText("\n");
Row++;
}
Так вот я о том, что это очень долго работает при больших
ReadLen. Я начинающий, поэтому думаю, что делаю определенно что то не так |
|
Вернуться к началу |
|
|
GeX
Зарегистрирован: 03.01.2004 Сообщения: 60 Откуда: Россия, Иркутск
|
Добавлено: Пн Авг 30 2004 05:13 Заголовок сообщения: |
|
|
Однозначно.....ошибка или в коде или в генах |
|
Вернуться к началу |
|
|
|