Russian Qt Forum
Май 17, 2024, 03:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Двоичный Counter с помощью QByteArray  (Прочитано 3880 раз)
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« : Сентябрь 15, 2012, 03:25 »

Надо записать в файл последовательно цифру от 0 до n в бинарном виде.
Это делаю с помощью QByteArray::fromHex(QByteArray::number(n,16)).
Но это с виду не очень рациональное решение.
Можно ли в Qt сделать это проще одной командой?
Перечитал документацию QByteArray так и не нашел то что нужно.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4729



Просмотр профиля WWW
« Ответ #1 : Сентябрь 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;
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Сентябрь 15, 2012, 11:35 »

Наверное лучше так
Код
C++ (Qt)
for (unsigned char i = 0; i < n; ++i)
   ds << i;
 
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #3 : Сентябрь 15, 2012, 12:26 »

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

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Сентябрь 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=23034.msg162663#msg162663

А то на легких вопросах легко хвост распускать  Улыбающийся
Записан
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« Ответ #5 : Сентябрь 16, 2012, 21:47 »

Спасибо за ответы.
Не знаю почему я не догадался использовать QDataStream.
Думал может для этого есть какая нибудь одна функция.

Код:
Код:
QByteArray data;
QDataStream stream(&data,QIODevice::WriteOnly);
stream<<n;
работает больше чем в два раза быстрее чем этот:
Код:
QByteArray data;
data=QByteArray::fromHex(QByteArray::number(n,16));
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.139 секунд. Запросов: 19.