Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> boost::format не выводит char нормально, format("%d") % char(0x20) выведет пробел 
V
    Опции темы
asmdzen
Дата 20.7.2011, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 28.11.2010

Репутация: нет
Всего: 5



В общем не нашел пока обход этой проблемы, делать каст для каждого параметра в int не кажется привлекательным.
например мне нужно массив данных записать в строку, ip адрес хранящийся в переменной типа int записать как xxx.xxx.xxx.xxx
Код

int ip = 0x0a0a0a0a;
char* pip = (char*) &ip;
boost::format frmt("%3d.%3d.%3d.%3d") % pip[0] % pip[1] % pip[2] % pip[3];


выведет четыре строки, в каждой по точке (0x0a == '\n')

кто нибудь сталкивался с этим? как обойти?

Это сообщение отредактировал(а) asmdzen - 20.7.2011, 16:50
PM MAIL   Вверх
asmdzen
Дата 20.7.2011, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 28.11.2010

Репутация: нет
Всего: 5



нашел красивый каст, но все же это каст (
Код

int ip = 0x0a0a0a0a;
char* pip = (char*) &ip;
boost::format frmt("%3d.%3d.%3d.%3d") % +pip[0] % +pip[1] % +pip[2] % +pip[4];


так и не понял как это работает.
PM MAIL   Вверх
borisbn
Дата 20.7.2011, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(asmdzen @  20.7.2011,  16:11 Найти цитируемый пост)
так и не понял как это работает.

Цитата

5.3.1. Unary operators
...
The operand of the unary + operator shall have arithmetic, enumeration, or pointer type and the result is the value of the argument. Integral promotion is performed on integral or enumeration operands. The type of the result is the type of the promoted operand.

char'ы являются integral-type'ом, так что к ним применяется Integral promotion.
А вот, что в Integral promotion пишут
Цитата

4.5 Integral promotions

An rvalue of type char, signed char, unsigned char, short int, or unsigned short int can be converted to
an rvalue of type int if int rvalue can be converted to an rvalue of type int if int can represent all the values of the source type; otherwise, the source rvalue can be converted to an rvalue of type unsigned int.



и правда, красиво smile


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
asmdzen
Дата 20.7.2011, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 28.11.2010

Репутация: нет
Всего: 5



borisbn спасибо за инфу.
так неужто они именно для этого и нужны эти "unary operators"? раньше я о них не слышал вроде.

Это сообщение отредактировал(а) asmdzen - 20.7.2011, 16:43
PM MAIL   Вверх
borisbn
Дата 20.7.2011, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(asmdzen @  20.7.2011,  16:39 Найти цитируемый пост)
раньше я о них не слышал вроде.

о unary minus не слышал ???
вот зачем плюс нужен - загадка. но, похоже, ты её отгадал smile

да... у тебя в коде ошибка ИМХО

Цитата(asmdzen @  20.7.2011,  16:11 Найти цитируемый пост)
boost::format frmt("%3d.%3d.%3d.%3d") % +pip[0] % +pip[1] % +pip[2] % +pip[4];




--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
asmdzen
Дата 20.7.2011, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 28.11.2010

Репутация: нет
Всего: 5



Цитата(borisbn @  20.7.2011,  16:45 Найти цитируемый пост)
о unary minus не слышал ???

теперь понял )) типа neg ассемблеровский
просто я сразу подумал насчет + и не понял как его применять.

Цитата(borisbn @  20.7.2011,  16:45 Найти цитируемый пост)
да... у тебя в коде ошибка ИМХО

спасибо, исправил (это только пример)

в общем проблема не в том что я не хочу делать каст для чаров, у меня класс лога основан на boost::format'е, не очень удобно всегда заморачиваться кастом (дополнительная память нужна  smile ). 

Это сообщение отредактировал(а) asmdzen - 20.7.2011, 16:54
PM MAIL   Вверх
spyswamp
Дата 22.7.2011, 14:28 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 18.8.2006

Репутация: 1
Всего: 7



А если передавать не %d, например, а %1% и т.п. - работает? ;)


--------------------
- why you call it beta?
- cuz it's betta then nothin'
PM MAIL   Вверх
asmdzen
Дата 22.7.2011, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 28.11.2010

Репутация: нет
Всего: 5



spyswamp, моя ошибка, забыл упомянуть что нужны именно printf'овские форматы.

хотя, сошел бы и этот если бы работал ))

кому хочется поэкспериментировать:
http://liveworkspace.org/code/0ad57c9686cf...de8afef656f6ced

тему закрываю поскольку нашел в рассылке boost'а с 2008 года такой же вопрос, значит никто и не пытается решить )

Это сообщение отредактировал(а) asmdzen - 22.7.2011, 16:43
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0827 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.