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

Поиск:

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


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

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



Есть ifstream, открывший бинарный файл для чтения. Мне надо брать по 6 байт из файла и ложить их в вектор <long long>'ов. Т.е. 2 байта там по сути нулями будут. Как это сделать без пробегания по буферу вручную?
Максимум что смог из себя выжать:
Код
vector<char> data;
fistream file;
...
copy(istream_iterator<char>(file), istream_iterator<char>(), back_inserter(data));


Это сообщение отредактировал(а) Rickert - 7.12.2010, 15:46


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
586
Дата 7.12.2010, 21:20 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Для Little-Endian:
Код
#include <iostream>
#include <fstream>
#include <string>
#include <vector>

int main(int argc, char* argv[])
{
    std::ifstream file;
    file.open("some_file.bin", std::ios::binary);
    file.seekg(0, std::ios_base::end);
    size_t n = (file.tellg() + 5) / 6;
    file.seekg(0, std::ios_base::beg);
    std::vector<long long> data(n);
    std::string tmp;
    std::cout << std::hex;

    for(size_t i = 0; i < n; ++i)
    {
        file.read((char*)&data[i], 6);
        std::cout << data[i];
        std::getline(std::cin, tmp);
    }

    std::cout << "Complete.";
    std::getline(std::cin, tmp);
}

PM   Вверх
Rickert
Дата 8.12.2010, 05:17 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

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



586
Цитата
Как это сделать без пробегания по буферу вручную?

 smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
azesmcar
Дата 8.12.2010, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Rickert

Можно создать свой back_inserter, который будет аккумулировать данные до тех пор, пока не наберется нужное количество и только потом будет вставлять. Но тогда, если нужно количество в последней итерации не наберется, то данные потеряются, хотя возможно это и не проблема.
PM   Вверх
mes
Дата 8.12.2010, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Rickert @  7.12.2010,  14:43 Найти цитируемый пост)
Мне надо брать по 6 байт из файла и ложить их в вектор <long long>'ов

явно алгоритм transform вместо copy.. и читать не по байту, а по 6.. 


Это сообщение отредактировал(а) mes - 8.12.2010, 13:51


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


Эксперт
****


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

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



Цитата(Rickert @  8.12.2010,  05:17 Найти цитируемый пост)
586
Цитата
Как это сделать без пробегания по буферу вручную?

  smile 

Я и не использовал никаких буферов, а писал сразу в вектор. А то, что нужно использовать именно стрим-итераторы, у Вас в посте нигде не указано. Каким способом читать тоже не указано. 
Так что, сам  smile 
PM   Вверх
Rickert
Дата 11.12.2010, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

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



Цитата
Я и не использовал никаких буферов, а писал сразу в вектор.

По-моему все кроме вас поняли: именно такой реализации я и не просил smile


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
586
Дата 11.12.2010, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Какая разница, поняли они или не поняли... Мой пост не противоречит тому, что Вы написали в первом посте.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0497 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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