Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Дамп пакета, Как сделать быстрее и правильней 
V
    Опции темы
REZiaMIX
Дата 13.6.2009, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 3.11.2007

Репутация: нет
Всего: 4



Есть данные , известна их длина.
Код

char * data;
int len;

как сформировать из этих данных дамп вида:
Код

2f 72 75 ff 6c 00

Как можно быстрее и правильней ???

Есть код:
Код

        buf = ...;
    for(UINT i=0;i!=len;++i)
    {
        char sign[32];
        itoa((int)buf[i],sign,16); 
        cons_print(sign);
    }

где cons_print - вывод в консоль smile

Но непойму откуда берутся пробелы , также вывод иногда не разделен(понятное дело), например ffffff8b. Или просто 0, 6 
user posted image


Это сообщение отредактировал(а) REZiaMIX - 13.6.2009, 17:07


--------------------
user posted image
PM MAIL   Вверх
GoldFinch
Дата 13.6.2009, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



вот так например
Код

#include <ostream>
#include <iomanip>

template<int N,typename FwdIter>
void WriteBytes(std::ostream& out,FwdIter& from,const FwdIter end)
{
    using namespace std;
    int i=0;
    for(; i<N && from!=end; ++i)
        out<<' '<<setw(2)<<static_cast<unsigned int>(static_cast<unsigned char>(*from++));
    if (from==end)
        out<<setfill(' ')<<setw((8-i)*3)<<"";
}

void dump(std::ostream& out,const char* first,const char* last)
{    
    using namespace std;

    ios_base::fmtflags savedFlags = out.flags();
    out<<hex<<right<<noshowbase<<setfill('0');
    out<<endl;

    for(const char *it1=first,*it2=first;it1!=last;)
    {        
        out<<uppercase<<setw(4)<<it1-first<<':';
        WriteBytes<8>(out,it1,last);
        out<<" |";
        WriteBytes<8>(out,it1,last);
        out<<" | "<<nouppercase;
        for(int i=0; i<16 && it2!=last; ++i, ++it2)
            out<<(*it2>=' '? static_cast<char>(*it2): '.');
        out<<endl;
    }
    out<<"- конец дампа (длина = "<<dec<<last-first<<"+2) -"<<endl<<endl;

    out.flags(savedFlags);
}

void dump(std::ostream& out,const char* ptr,size_t siz)
{
    dump(out,ptr,ptr+siz);
}

PM MAIL ICQ   Вверх
REZiaMIX
Дата 13.6.2009, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 3.11.2007

Репутация: нет
Всего: 4



Цитата(GoldFinch @ 13.6.2009,  17:07)
вот так например

Как быстро , щас проверим . Спасибо)


--------------------
user posted image
PM MAIL   Вверх
GoldFinch
Дата 13.6.2009, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



ffffff8b это потому что у тя char а не unsigned char
чтобы вместо 0 было 00 надо 
cout<<right<<setfill('0'); cout<<setw(2)<<...
PM MAIL ICQ   Вверх
azesmcar
Дата 13.6.2009, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(REZiaMIX @  13.6.2009,  17:02 Найти цитируемый пост)
Но непойму откуда берутся пробелы

не поймуы что за функция cons_print?

Код

for (unsigned int i = 0; i < length; ++i)
{
    printf("%x ", ptr[i]);
}

PM   Вверх
REZiaMIX
Дата 13.6.2009, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 3.11.2007

Репутация: нет
Всего: 4



Цитата(azesmcar @ 13.6.2009,  17:10)
не поймуы что за функция cons_print?

Код

HANDLE OUTPUT_HANDLE;

void cons_print(char * text)
{
    DWORD written;
    WriteConsole(OUTPUT_HANDLE,(void*)text,strlen(text)+1,&written,NULL);
}


Не надо спрашивать , почему так сделано))
GoldFinch работает как часы , то что надо , да еще как быстро! Спасибо ))))

Добавлено @ 17:26
Интересно было бы знать как сделать это без stl
что-нить наподобие hex(char * in, char * out, int len);
 smile 

Это сообщение отредактировал(а) REZiaMIX - 13.6.2009, 17:26


--------------------
user posted image
PM MAIL   Вверх
REZiaMIX
Дата 13.6.2009, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 3.11.2007

Репутация: нет
Всего: 4





--------------------
user posted image
PM MAIL   Вверх
azesmcar
Дата 13.6.2009, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(REZiaMIX @  13.6.2009,  17:43 Найти цитируемый пост)
Через поиск форума не нашел , нашел через гугл!!!
Спасибо azesmcar еще раз !) 

Цитата из того поста
Цитата(andrew_121)

Цитата(azesmcar @  22.5.2009,  20:03 Найти цитируемый пост)
пусть будет здесь, мало ли кому еще понадобится

Ты и вправду веришь что кто-то пользуется поиском? smile  smile 

 smile 
andrew_121
теперь верю smile 
PM   Вверх
andrew_121
Дата 13.6.2009, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



azesmcar, Гы))) Узнаю smile 


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0593 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.