Russian Qt Forum

Qt => Общие вопросы => Тема начата: IGHOR от Сентябрь 15, 2012, 03:25



Название: Двоичный Counter с помощью QByteArray
Отправлено: IGHOR от Сентябрь 15, 2012, 03:25
Надо записать в файл последовательно цифру от 0 до n в бинарном виде.
Это делаю с помощью QByteArray::fromHex(QByteArray::number(n,16)).
Но это с виду не очень рациональное решение.
Можно ли в Qt сделать это проще одной командой?
Перечитал документацию QByteArray так и не нашел то что нужно.


Название: Re: Двоичный Counter с помощью QByteArray
Отправлено: kambala от Сентябрь 15, 2012, 04:40
Код
C++ (Qt)
QFile f("a.out");
if (!f.open(QIODevice::WriteOnly))
   return;
QDataStream ds(&f);
for (int i = 0; i < n; ++i)
   ds << i;


Название: Re: Двоичный Counter с помощью QByteArray
Отправлено: Igors от Сентябрь 15, 2012, 11:35
Наверное лучше так
Код
C++ (Qt)
for (unsigned char i = 0; i < n; ++i)
   ds << i;
 


Название: Re: Двоичный Counter с помощью QByteArray
Отправлено: xokc от Сентябрь 15, 2012, 12:26
Наверное лучше так
Код
C++ (Qt)
for (unsigned char i = 0; i < n; ++i)
   ds << i;
 
Ну если точно следовать условиям ТС (он хотел, всё-таки цифры писать , а это 0..9), то uchar действительно хватит. Но вдруг ему надо записывать значения, большие чем 255? Или вдруг float какие-нибудь? Тогда уж через шаблоны надо писать :).


Название: Re: Двоичный Counter с помощью QByteArray
Отправлено: Igors от Сентябрь 15, 2012, 12:42
Дело не в том "хватит или нет" - должно быть записано нужное число байт, в данном случае 1.

Ну и вообще, такие темы лучше оставить для начинающих, пусть они показывают свои познания :) А для Вас и kambala(ы) есть штучки поинтереснее, напр

http://www.prog.org.ru/index.php?topic=23026.msg162616#msg162616 (http://www.prog.org.ru/index.php?topic=23026.msg162616#msg162616)
http://www.prog.org.ru/index.php?topic=23034.msg162663#msg162663 (http://www.prog.org.ru/index.php?topic=23034.msg162663#msg162663)

А то на легких вопросах легко хвост распускать  :)


Название: Re: Двоичный Counter с помощью QByteArray
Отправлено: IGHOR от Сентябрь 16, 2012, 21:47
Спасибо за ответы.
Не знаю почему я не догадался использовать QDataStream.
Думал может для этого есть какая нибудь одна функция.

Код:
Код:
QByteArray data;
QDataStream stream(&data,QIODevice::WriteOnly);
stream<<n;
работает больше чем в два раза быстрее чем этот:
Код:
QByteArray data;
data=QByteArray::fromHex(QByteArray::number(n,16));