Как я могу читать и записывать беззнаковые символы в файлы с fstream на c ++? - PullRequest
5 голосов
/ 29 декабря 2011

Пока у меня есть код для чтения беззнакового символа из ifstream:

ifstream in;
unsigned char temp;

in.open ("RANDOMFILE", ios::in | ios::binary);
in.read (&temp, 1);
in.close ();

Это правильно? Я также пытался написать неподписанный символ в офстрим:

ofstream out;
unsigned char temp;

out.open ("RANDOMFILE", ios::out | ios::binary);
out.write (&static_cast<char>(temp), 1);
out.close ();

Но я получаю следующую ошибку при записи:

error C2102: '&' requires l-value

И эта ошибка для чтения:

error C2664: 'std::basic_istream<_Elem,_Traits>::read' : cannot convert parameter 1 from 'unsigned char *' to 'char *'

Буду признателен, если кто-нибудь скажет мне, что не так с моим кодом или как я могу читать и писать неподписанные символы из fstream.

Ответы [ 2 ]

8 голосов
/ 29 декабря 2011

Ошибка записи говорит вам, что вы берете адрес временного файла, созданного static_cast.

Вместо:

// Make a new char with the same value as temp
out.write (&static_cast<char>(temp), 1);

Использовать те же данные, которые уже есть в temp:

// Use temp directly, interpreting it as a char
out.write (reinterpret_cast<char*>(&temp), 1);

Ошибка чтения также будет исправлена, если вы скажете компилятору интерпретировать данные как символы:

in.read (reinterpret_cast<char*>(&temp), 1);
2 голосов
/ 29 декабря 2011

Функция read всегда принимает байты в качестве аргументов, представленных в виде значений char для удобства.Вы можете навести указатель на эти байты столько, сколько захотите, поэтому

in.read (reinterpret_cast<char*>(&temp), 1);

будет прекрасно читать один байт.Помните, что память - это память, это память, а типы C ++ - это просто интерпретация памяти.Когда вы читаете необработанные байты в необработанную память (как с read), вы должны сначала прочитать, а затем привести к соответствующему типу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...