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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> дамп буфера в стандартный вывод 
:(
    Опции темы
GoldFinch
Дата 22.5.2009, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



надо вывести содержимое буфера char*buf (или std::vector<char>) в стандартный вывод в виде
Код

0000: 31 20 32 00 31 20 32 00|31 20 32 00 31 20 32 00  | 1 2.1 2.1 2.1 2.
0010: ...                    |                         | ....

есть какойнибудь стандартный метод, или этот велосипед надо самому писать?

Это сообщение отредактировал(а) GoldFinch - 22.5.2009, 15:15
PM MAIL ICQ   Вверх
zim22
Дата 22.5.2009, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

Репутация: 29
Всего: 69



Цитата(GoldFinch @  22.5.2009,  15:15 Найти цитируемый пост)
или этот велосипед надо самому писать?

самому писать


--------------------
PM MAIL   Вверх
GoldFinch
Дата 22.5.2009, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



а жаль
PM MAIL ICQ   Вверх
azesmcar
Дата 22.5.2009, 20:03 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Код

void hexdump(void *ptr, int length)
{
    unsigned char *buf = (unsigned char*)ptr;

    for (int i = 0; i < length; i += 16)
    {
        printf("%06x: ", i);
        for (int j = 0; j < 16; ++j) 
        {
            if (i + j < length)
                printf("%02x ", buf[i+j]);
            else
                printf("   ");
        }
        printf(" ");
        for (int j = 0; j < 16; ++j) 
            if (i + j < length)
                printf("%c", isprint(buf[i+j]) ? buf[i+j] : '.');
        printf("\n");
    }
}

пусть будет здесь, мало ли кому еще понадобится

Это сообщение отредактировал(а) azesmcar - 22.5.2009, 20:04
PM   Вверх
GoldFinch
Дата 22.5.2009, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



как в cout вывести байт как число?
Код

char x=1;
cout<<x; // надо вывести "1"

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



****


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

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



cout<<static_cast<int>(x); помогло
PM MAIL ICQ   Вверх
mes
Дата 22.5.2009, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 79
Всего: 250



Цитата(GoldFinch @  22.5.2009,  20:08 Найти цитируемый пост)
cout<<static_cast<int>(x); помогло 

на многих компилятор char по умолчанию signed; поэтому простое преобразование в int даст отрицательное значение "для половины чаров", поэтому Вам мне кажется больше подойдет двойное преобразование:
Код

static_cast<int>(static_cast<unsigned char>(c));


Это сообщение отредактировал(а) mes - 22.5.2009, 21:33


--------------------
PM MAIL WWW   Вверх
andrew_121
Дата 22.5.2009, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



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

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


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
mes
Дата 22.5.2009, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 79
Всего: 250



Цитата(andrew_121 @  22.5.2009,  21:46 Найти цитируемый пост)
Ты и вправду веришь что кто-то пользуется поиском? smile  smile  

а я например не верю, что никто не пользуется, 
  сам например зачастую пользуюсь, не смотря на то, что не всегда получается удачно найти требуемое. 
 smile 

Это сообщение отредактировал(а) mes - 22.5.2009, 22:50


--------------------
PM MAIL WWW   Вверх
Rififi
Дата 22.5.2009, 23:35 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 3
Всего: 36



надо вывести голую женщину на десктоп.
есть какойнибудь стандартный метод, или этот велосипед надо самому писать?

PM MAIL   Вверх
GoldFinch
Дата 22.5.2009, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Rififi, ты несогласен с тем, что это велосипед?
PM MAIL ICQ   Вверх
GoldFinch
Дата 23.5.2009, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



набросал кодес, нужна критика
Код

#define _SECURE_SCL 0
#include <vector>
#include <iostream>
#include <iomanip>
#include <locale>
#include <algorithm>

typedef std::vector<unsigned char> Buf;

template<typename charT,typename traits>
std::basic_ostream<charT,traits>&
operator<< (std::basic_ostream<charT,traits>& out,const Buf& buf){
    using namespace std;
    ios_base::fmtflags savedFlags = out.flags();
    out<<hex<<right<<noshowbase<<setfill('0');
    out<<endl;
    for(Buf::const_iterator i0=buf.begin(),i=i0,e=buf.end();i<e; i+=16){
        Buf::const_iterator j;
        out<<setw(4)<<i-i0<<':';
        for(j=i;(j<i+8)&&(j<e); ++j)
            out<<" "<<setw(2)<<static_cast<int>(*j);
        if(j>=e) {
            out<<setfill(' ')<<setw((i+8-j)*3+1);
            j=i+8;
        };
        out<<'|';
        for(;j<i+16&&j<e; ++j)
            out<<setw(2)<<static_cast<int>(*j)<<' ';
        if(j>=e)
            out<<setfill(' ')<<setw((i+16-j)*3+1);
        out<<'|'<<' ';
        for(j=i;j<i+16&&j<e; ++j)
            out<<((*j>=' ')?char(*j):'.');
        out<<endl;
    };
    out.flags(savedFlags);
    return out;
}

char gen_debug_data(){return rand() % 256;}

int main(){
    setlocale(LC_ALL,"Russian");    
    Buf buf(61);
    std::generate(buf.begin(),buf.end(),gen_debug_data);
    std::cout<<"дамп буфера ("<<buf.size()<<"байт):"<<buf<<"- конец дампа -"<<std::endl;
    return 0;
}

без "#define _SECURE_SCL 0" почемуто не работает

Это сообщение отредактировал(а) GoldFinch - 23.5.2009, 01:36
PM MAIL ICQ   Вверх
andrew_121
Дата 23.5.2009, 02:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Цитата(GoldFinch @  23.5.2009,  01:35 Найти цитируемый пост)
i0

Вот критика. Читать невозможно.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
azesmcar
Дата 23.5.2009, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



GoldFinch

Цитата(GoldFinch @  23.5.2009,  01:35 Найти цитируемый пост)
#define _SECURE_SCL 0

этот флаг убирает проверку на валидность итераторов. Так оставлять нельзя.

в принципе критики много, писать все лень, так что выложу немного измененный код, найди отличия
Код

using namespace std;

typedef vector<unsigned char> Buf;

ostream& operator<< (ostream& out, const Buf& buf){
    //backup flags
    std::ios_base::fmtflags backup = out.flags();

    out << hex<< right << noshowbase << setfill('0') << endl;;
    
    Buf::const_iterator j;
    for(Buf::const_iterator i0 = buf.begin(), i = i0, e = buf.end(); i < e; i += 16)
    {
        out << setw(4) << i - i0 << ':';

        for(j = i; (j < i + 8) && (j < e); ++j)
            out << " " << setw(2) << static_cast<int>(*j);
        
        if(j >= e)
        {
            out << setfill(' ') << setw((i + 8 - j) * 3 + 1);
            j = i + 8;
        }
        
        out << '|';
        
        for(; j < i + 16 && j < e; ++j)
            out << setw(2) << static_cast<int>(*j) << ' ';
        
        if(j >= e)
            out << setfill(' ') << setw((i + 16 - j) * 3 + 1);

        out << '| ';
        for(j = i; j < i + 16 && j < e; ++j)
            out << ((*j>=' ') ? char(*j) : '.');

        out << endl;
    };

    //restore
    out.flags(backup);
    return out;
}

в логику не вдавался, но вылетает тут
Цитата

for(; j < i + 16 && j < e; ++j)

видимо тут итератор переходит рамки вектора. посмотри дебагером.

Это сообщение отредактировал(а) azesmcar - 23.5.2009, 09:19
PM   Вверх
GoldFinch
Дата 23.5.2009, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



azesmcar, из отличий нашел только пару ошибок,  смену стиля форматирования кода, и зачем-то убранный шаблон
и мне совсем непонятно чем 
//backup flags
    std::ios_base::fmtflags backup = out.flags();
лучше переменной savedFlags

и зачем using namespace std; выкинут в начало файла, если не факт что он там нужен


andrew_121, это какбэ "нулевое (начальное) значение счетчика i"

Это сообщение отредактировал(а) GoldFinch - 23.5.2009, 11:56
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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