Мне необходимо считать из файла данные в двоичном виде - сначала несколько int
, потом uint8_t
, затем еще кое-что.
Я пытаюсь использовать QFile::read()
вместо fread()
, но получается как-то страшно:
quint32 newNameLength;
qint64 rCode = file.read(reinterpret_cast<char*>(&newNameLength),
sizeof(quint32));
Так вообще можно делать? Если нет, то каков в Qt самый удобный аналог для:
uint32_t newNameLength;
size_t rCode = fread(&newNameLength, sizeof(uint32_t), 1, f);
?
Можно написать обёртку:
size_t qread(void *ptr, size_t size, size_t count, QIODevice &file)
{
// QIODevice::read не может вернуть число большее, чем мы передали ему в maxSize
return file.read(reinterpret_cast<char*>(&ptr), size * count);
}
Но лучше воспользоваться типобезопасностью C++ и поместить всё в шаблоны:
// Вариант для массива
template<typename T>
size_t qread(T *out, size_t count, QIODevice &file)
{
return file.read(reinterpret_cast<char*>(&out), sizeof(T) * count);
}
// Вариант для одиночного элемента
template<typename T>
size_t qread(T &out, QIODevice &file)
{
return qread(&T, 1, file);
}
Конечно так, можно, или ещё проще:
quint32 newNameLength;
qint64 rCode = file.read((char*)&newNameLength, sizeof(quint32));
так как понятно, что нужен просто адрес, разработчикам надо было бы сразу сделать первый аргумент, как void *. Qt вообще частенько адреса, как char * передаёт, что плохо в отличии от memcpy.
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Раньше в netbeans терминал Cygwin работал даже без открытия java проекта, но теперь после обновления пишет сообщение "unable to start pty process": Прошу тока не предлагать...
Хочу использовать Xalan-J для XSLT-преобразования (Java 8)Скачал библиотеку Xalan-J 2
У меня recyclerView с кучей элементов, каждый элемент должен отформатировать и отобразить Date, паттерн для всех одинаковый
Ситуация такая: в пэкедже создается 6 энтити, которые в свою очередь являются потокамиВо время выполнения они заходят в saveTelegram (для того чтобы...