LINUX.ORG.RU

C++ побайтовое чтение из файла.


0

1

к примеру есть у меня файл, записанный в бинарном режиме. мне необходимо считать первые четыре байта в unsigned, я точно знаю что там число и ничто другое. дальше могут следовать абсолютно рандомные байты, мне нужны первые четыре.

если бы я писал на сях, я бы использовал fread, там все просто. как организовать такое в С++?

★★★★

так же как и в си, fread()

mashina ★★★★★
()
Ответ на: комментарий от nokachi

Тут да, походу про файл ежели он fread хочет юзать. Только я оп том что если у ТС уже на стримах что то понаписанно, что же его сразу фанатиком называть? Я скажем всякую компрессию через бустовую стримову библиотеку пользую, очень удобно.

ebantrop
()

[упоротый способ] отрази в память и работай с указателем [/упоротый способ]

TakeOver
()

если бы я писал на сях, я бы использовал fread, там все просто. как организовать такое в С++?

man 3 fread.

там нет запрета юзать fread в C++.

drBatty ★★
()
Ответ на: комментарий от wota

тогда поставим вопрос по другому. как считать unsigned с помощью метода read?

пожалуйста, сильно не пинайте, у меня еще все впереди.

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    ifstream infile ("file.txt", ios::binary);
	unsigned n = 0;

	infile.read(??????, sizeof(unsigned));

	if (infile)
	{
		cout << n << endl;
	}
	else
	{
		cout << "error" <<  endl;
	}

	infile.close();

    return 0;
}

WRG ★★★★
() автор топика
Ответ на: комментарий от wota

ох ло, спасибо! я до этого пробовал &((char*)n). оказалось то надо адрес уже приводить к char*, а я сперва хотел n привести к char*, а потом уж адрес взять. благодарю!

WRG ★★★★
() автор топика
Ответ на: комментарий от WRG

а потом уж адрес взять

Бросай плюсы, вали читать K&R.

anonymous
()
Ответ на: комментарий от wota

(char*) &n

а зачем тут вообще преобразование? unsigned* -> void* разве само не скастуется? Если и не скастуется, то надо всё равно в (void*) кастовать, ибо read(2) хочет void*.

drBatty ★★
()

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

m0rph ★★★★★
()
Ответ на: комментарий от Begemoth

Спасибо. Но это походу только в гнутых системах есть.

ebantrop
()
Ответ на: комментарий от wota
static_cast<>

На приведение в старом стиле даже gcc уже ворнингами плюётся, а старпёры всё никак не переучатся =)

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от DELIRIUM

На приведение в старом стиле даже gcc уже ворнингами плюётся, а старпёры всё никак не переучатся =)

а) чушь - у меня всегда включены все предупреждения и -Werror, не видел ничего такого от gcc и clang
б) рано меня в старперы записывать, мне еще до 30 хотя бы дожить надо ;)
в) это просто личное предпочтение, классы кастую в сиплюсном стиле, а базовые типы в сишном, что кстати помогает чтению кода

wota ★★
()
Ответ на: комментарий от wota
-Wold-style-cast (C++ and Objective-C++ only)
    Warn if an old-style (C-style) cast to a non-void type is used within a C++ program. The new-style casts (‘dynamic_cast’, ‘static_cast’, ‘reinterpret_cast’, and ‘const_cast’) are less vulnerable to unintended effects and much easier to search for. 
DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от DELIRIUM

как я уже говорил - ваше личное частное решение, можно и "-Weffc++ -Wsystem-headers" к примеру добавить, будет весело смотреть на тонны предупреждений, но опять же - занятие для любителей, потому этих опций нет ни по дефолту, ни в all, ни даже в extra

wota ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.