crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в как сохранить в файл?
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Алексей1153 Дата 6.7.2010, 9:28
 
Цитата(DIMEDROLL @ 6.7.2010, 11:16) *
size_t это не int, a unsigned int, максимальное значение на 32битной системе = 4 ГБ

Один хрен, назвать как угодно можно :) Главное - смысл. А знаковый/не знаковый легко приводится

Даже если предположить, что это знаковое, всё равно массивов с таким индексом вряд ли встретишь. Даже если это массив байтов
DIMEDROLL Дата 6.7.2010, 8:16
  size_t это не int, a unsigned int, максимальное значение на 32битной системе = 4 ГБ
size_t - это тип-размер, используется для индексации массивов например, указания размера массивов и т.п.
Алексей1153 Дата 3.7.2010, 20:22
 
Цитата(deex @ 3.7.2010, 23:11) *
что такое void *buffer

Удивляешь... В языках C/C++ void - это пустой тип. Указатель на void - указатель на любой тип (поэтому необходимо в нагрузку знать размер элемента плюс размер массива, или же размер массива в байтах сразу)

В данном случае buffer - буфер с данными, а size (как я полагаю) - размер буфера в байтах

Цитата(deex @ 3.7.2010, 23:11) *
почему его можно записывать в файл

записать в файл можно что угодно.

Цитата(deex @ 3.7.2010, 23:11) *
что за тип size_t ? зачем он нужен?

чисто блажь разработчиков. Мысленно считай его типом int

Цитата(deex @ 3.7.2010, 23:11) *
на данный момент вылетает и я не очень понимаю как в QtCreator отследить ошибку

в какой момент вылетает ? Запустить под отладкой и поставить точку останова в начале функции
static size_t write(void *buffer, size_t size, size_t nmemb, void *stream)

Потом шагать по строчке
deex Дата 3.7.2010, 20:11
  спасибо, но повторю ещё раз:

- я хочу переписать на Qt
- что такое void *buffer -- почему его можно записывать в файл и почему оно void?
- что за тип size_t ? зачем он нужен?

ещё раз достигнутое:

static size_t write(void *buffer, size_t size, size_t nmemb, void *stream)
{
QFile file("test.png");
file.open(stderr, QIODevice::WriteOnly);

size_t result = file.write((const char *) buffer, size);
file.close();

return result;
}


на данный момент вылетает и я не очень понимаю как в QtCreator отследить ошибку
Алексей1153 Дата 2.7.2010, 15:48
  А вот тут автору надо уточнить
size_t n = size * sizeof(float);

может, size - это уже размер в байтах (как у белых людей принято) ?
DEADHUNT Дата 2.7.2010, 15:41
  лучше как-то так:
static size_t write(void *buffer, size_t size, size_t nmemb, void *stream)
{
    std::ofstream stream("test.png");
    if (!stream)
        return 0;
    size_t n = size * sizeof(float);
    stream.write((unsigned char*) buffer, n);
    stream.close();
    if (stream.bad())
        return 0;
    return n;
}
Алексей1153 Дата 2.7.2010, 15:35
  а так
static size_t write(void *buffer, size_t size, size_t nmemb, void *stream)
{
QFile file("test.png");
file.open(stderr, QIODevice::WriteOnly);

size_t t=file.write((char*)buffer, size);
file.close();

if(t<0) return 0;

return t
}



size_t - обычно это

typedef int size_t

deex Дата 2.7.2010, 11:42
  использую curl, чтобы скачать картинку
он вызывает внешнюю функцию для записи в файл

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &write);

в оригинале она записывает данные в файл через fwrite()

решил переписать на Qt:

static size_t write(void *buffer, size_t size, size_t nmemb, void *stream)
{
QFile file("test.png");
file.open(stderr, QIODevice::WriteOnly);

file.write(buffer, size * sizeof(float));
file.close();

return;
}


1. file.write не хочет принимать void *buffer. что это вообще такое?
2. просто уточнить - curl вызывает эту функцию один раз? или по мере скачивания файла, дописывая полученные данные?
3. что вернуть в ретурн, чтобы был size_t

ps заодно, прошу прояснить для меня что вообще такое size_t
частно вижу его, но в стандартных типах его нет. зачем его используют и почему пишут именно t?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 22:30