Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
нельзя указать кол-во бит и инициализировать их в новом стандарте
|
|||
|---|---|---|---|
|
#18+
снова я :) затеят тут создать класс для ip - погуглил и ничего не нашел. думаю запихать все в числа, создать преобразователь в строку и из строки, парсер, проверку, также опции компиляции, чтобы это все можно было отключить если что. сразу встало несколько вопрсов. но вот самая большая неприятность (со времени выхода новых стандартов не писал никоуровневых классов, а теперь растроился): вот так написать оказалось нельзя Код: plaintext 1. 2. а что делать тогда? ведь для ipv6 мне нужно выделить 16 байт.. я думал разбить их на части по 2 байта (указать 16), но тогда их нельзя будет инициализировать.. попробовал так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. но так тоже нельзя инициализировать :) говорит, что не может прировнять это. получается только если конструктор делать у этой структуры.. я правильно понимаю, что в стандарте по этому поводу ни слова? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2016, 16:26 |
|
||
|
нельзя указать кол-во бит и инициализировать их в новом стандарте
|
|||
|---|---|---|---|
|
#18+
Обычные in_addr/in6_addr тбя не устраивают чем? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2016, 16:31 |
|
||
|
нельзя указать кол-во бит и инициализировать их в новом стандарте
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovОбычные in_addr/in6_addr тбя не устраивают чем?да, что-то о них не подумал, наверное все равно в них придется преобразовывать, чтобы куда-нибудь передать.. я не хотел их юзать - эти сишные структуры будут поялвятся потом везде, где будет влючен этот файл. но даже если использовать их, там не указана версия и порт, то есть придется делать структуру где указать эту инфу и юнинон в ней с in_addr/in6_addr .. то есть та же проблема - порт не инициализирован и они тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2016, 16:45 |
|
||
|
нельзя указать кол-во бит и инициализировать их в новом стандарте
|
|||
|---|---|---|---|
|
#18+
alexy_blackно даже если использовать их, там не указана версия и порт, то есть придется делать структуру где указать эту инфу и юнинон в ней Всё уже украдено до тебя: sockaddr_in/sockaddr_in6. Всё равно же преобразовывать для использования. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2016, 17:10 |
|
||
|
нельзя указать кол-во бит и инициализировать их в новом стандарте
|
|||
|---|---|---|---|
|
#18+
alexy_blackснова я :) затеят тут создать класс для ip - погуглил и ничего не нашел. думаю запихать все в числа, создать преобразователь в строку и из строки, парсер, проверку, также опции компиляции, чтобы это все можно было отключить если что. сразу встало несколько вопрсов. но вот самая большая неприятность (со времени выхода новых стандартов не писал никоуровневых классов, а теперь растроился): вот так написать оказалось нельзя Код: plaintext 1. 2. а что делать тогда? Битовые поля С++ не поддерживает. Тебе нужно сделать ОДИН модуль на чистом С из данных и интерфесов к ним (функций, обрабатывающих), а остальное можно делать на C++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2016, 20:18 |
|
||
|
нельзя указать кол-во бит и инициализировать их в новом стандарте
|
|||
|---|---|---|---|
|
#18+
MasterZivБитовые поля С++ не поддерживает.Разве? // http://en.cppreference.com/w/cpp/language/bit_field ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2016, 04:15 |
|
||
|
нельзя указать кол-во бит и инициализировать их в новом стандарте
|
|||
|---|---|---|---|
|
#18+
Пётр Седов, ну ок, может и так, но не в классах, только в POD структурах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2016, 09:10 |
|
||
|
нельзя указать кол-во бит и инициализировать их в новом стандарте
|
|||
|---|---|---|---|
|
#18+
в любом случае от автора нужен полный код, а не обрывки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2016, 09:11 |
|
||
|
нельзя указать кол-во бит и инициализировать их в новом стандарте
|
|||
|---|---|---|---|
|
#18+
alexy_blackсразу встало несколько вопрсов. но вот самая большая неприятность (со времени выхода новых стандартов не писал никоуровневых классов, а теперь растроился): вот так написать оказалось нельзя Код: plaintext 1. 2. К стандартам С++ это не имеет отношения. Инициализировать поля прямо в структуре или классе нельзя было с самого начала. Ну и в С тоже естественно. Потом начиная с С++11 стало можно в большинстве случаев. Но про битовые поля - я не в курсе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2016, 14:11 |
|
||
|
нельзя указать кол-во бит и инициализировать их в новом стандарте
|
|||
|---|---|---|---|
|
#18+
Инлайновые инициализаторы для битовых полей не поддерживаются (см. ссылку выше) Но можно инициализировать как прочие поля в конструкторе. Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2016, 14:22 |
|
||
|
нельзя указать кол-во бит и инициализировать их в новом стандарте
|
|||
|---|---|---|---|
|
#18+
alexy_black Код: plaintext 1. unsigned short это и есть ровно 16 бит. Зачем тут с битами что-то городить? Только непонятно зачем тут unsigned short: IPv4 = 4 байта, т.е. ровно uint32_t или uint8_t[4] IPv6 = 16 байт, т.е. ровно uint32_t[4] или uint8_t[16] unsigned short разве что для номера порта сгодится. Я бы добавил еще 1 байт: тип адреса IPv4/IPv6. Т.е. так Код: plaintext 1. 2. 3. 4. 5. Именно в таком порядке, т.к. type и port после выравнивания займут 4 байта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2016, 14:26 |
|
||
|
нельзя указать кол-во бит и инициализировать их в новом стандарте
|
|||
|---|---|---|---|
|
#18+
Dima T, да про эти short написано в стандарте, что не меньше 16.. для типа я сделал перечисление Код: plaintext 1. invalid - тоже важно, потому что это дает способ узнать, что ip не 0.0.0.0 а просто не был инициализирован например. кода пока нет. я начал его писать, и вот воткнулся в эти битовые поля. я сделал обертку над libuv + h2o (новые такой сервер). но при старте и вобще в процессе работы, нужно иметь возможность открывать порты и слушать другие ip. для этого использую функцию uv_ipv[4,6]_addr (чтобы распарсить строку от пользователя). вот получилось, что сейчас у меня в интерфейс пользователя передается std::string с адресом и enum с версией. меня это как бы не устраивает, во-вервых потому что нужно передвать два параметра, вместо одного, во-вторых потому что нет защиты от ошибок да и вобще не ооп. вот вариат просто првоерить, пока не занялся вполтную этим вопросом Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2016, 19:51 |
|
||
|
нельзя указать кол-во бит и инициализировать их в новом стандарте
|
|||
|---|---|---|---|
|
#18+
Забей ты на битовые поля. Не нужны они тут. Допустим есть: Код: plaintext 1. можно так с ним поработать Код: plaintext 1. 2. можно просто union использовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2016, 20:17 |
|
||
|
нельзя указать кол-во бит и инициализировать их в новом стандарте
|
|||
|---|---|---|---|
|
#18+
Dima T, а кстати, точно, так и за границы случайно не вылезешь, спасибо. выводить получается нужно будет по маскам чтоли? то есть получить первый байт, вывести, потом точку и второй... вобще я что-то подзабыл про эти std::uintXX_t :) их же в c++11 добавили в стандрат, до этого я так понимаю просто из c были.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2016, 20:23 |
|
||
|
нельзя указать кол-во бит и инициализировать их в новом стандарте
|
|||
|---|---|---|---|
|
#18+
это не плюсы, а просто С. Можно так Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2016, 20:29 |
|
||
|
нельзя указать кол-во бит и инициализировать их в новом стандарте
|
|||
|---|---|---|---|
|
#18+
Dima Tэто не плюсы, а просто С. Можно так Код: plaintext 1. 2. гы, а я-то уже собрался через маски делать ))) точно, как-то си у меня хромает :) http://en.cppreference.com/w/cpp/types/integer ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2016, 20:34 |
|
||
|
нельзя указать кол-во бит и инициализировать их в новом стандарте
|
|||
|---|---|---|---|
|
#18+
alexy_blackвобще я что-то подзабыл про эти std::uintXX_t :) их же в c++11 добавили в стандрат, до этого я так понимаю просто из c были.. Вообще-то просто сократили количество букав: uint8_t = unsigned char uint16_t = unsigned short uint32_t = unsigned int uint64_t = unsigned long long ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2016, 20:36 |
|
||
|
нельзя указать кол-во бит и инициализировать их в новом стандарте
|
|||
|---|---|---|---|
|
#18+
Dima TВообще-то просто сократили количество букавна сколько я понимаю, эти типы гарантируют свою длину по стандарту. то есть если какой-то компилятор решит сделать short не двумя байтами, то uint16_t должен остаться двумя.. вот например андройд - они там намудрили со стандартом (там вроде char и wchar - один байт), а это должно работать.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2016, 23:08 |
|
||
|
нельзя указать кол-во бит и инициализировать их в новом стандарте
|
|||
|---|---|---|---|
|
#18+
MasterZivну ок, может и так, но не в классах, только в POD структурах.В ATL например bit field-ы используются в классах (виртуальный деструктор => не POD): atlctl.h Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. Но если это в коде ATL, то это ещё не значит, что это соответствует стандарту. Microsoft-у стандарт не писан :). Dima Tunsigned short это и есть ровно 16 бит.Это где такое написано? Раньше было так: количество бит в unsigned short = sizeof(unsigned short) * CHAR_BIT CHAR_BIT -- количество бит в байте, стандартная константа из limits.h. Были экзотические платформы с необычными размерами встроенных типов. Книжка М. И. Болски «Язык программирования Си»: 3.7. Размер данных Следующая таблица даёт размер в битах основных типов данных для различных ЭВМ. ... Основные типы данныхHONEYWELL 6000 ...IBM 360/370 ...INTERDATA 8/32 ...char988int363232short361616long363232............ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2016, 23:21 |
|
||
|
нельзя указать кол-во бит и инициализировать их в новом стандарте
|
|||
|---|---|---|---|
|
#18+
а если битовые поля объединить union-ом с "полноценными" переменным и их заинициализировать в описании класса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2016, 06:16 |
|
||
|
нельзя указать кол-во бит и инициализировать их в новом стандарте
|
|||
|---|---|---|---|
|
#18+
Пётр СедовDima Tunsigned short это и есть ровно 16 бит.Это где такое написано? Раньше было так: количество бит в unsigned short = sizeof(unsigned short) * CHAR_BIT CHAR_BIT -- количество бит в байте, стандартная константа из limits.h. Были экзотические платформы с необычными размерами встроенных типов... В том и дело что когда-то были, но сегодня их уже нет и не ожидается. Какой смысл на них оглядываться? По факту сегодня везде 1 байт = 8 бит. И нет смыла на экзотику закладываться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2016, 07:50 |
|
||
|
нельзя указать кол-во бит и инициализировать их в новом стандарте
|
|||
|---|---|---|---|
|
#18+
CEMbа если битовые поля объединить union-ом с "полноценными" переменным и их заинициализировать в описании класса?а кстати, должно сработаьт.. сча посмортим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2016, 14:53 |
|
||
|
нельзя указать кол-во бит и инициализировать их в новом стандарте
|
|||
|---|---|---|---|
|
#18+
Dima TПётр Седов Были экзотические платформы с необычными размерами встроенных типов... В том и дело что когда-то были, но сегодня их уже нет и не ожидается.Как ни странно, существуют до сих пор: // https://en.wikipedia.org/wiki/36-bit some 36-bit computer systems are still sold as of 2014, e.g., the Unisys ClearPath Dorado series, which is the continuation of the UNIVAC 1100/2200 series of mainframe computers. Dima TПо факту сегодня везде 1 байт = 8 бит.Да, почти везде. Архитектуры x86 и ARM подмяли под себя почти всё, а остальные архитектуры либо вымерли, либо занимают очень узкие ниши (embedded, mainframe), и большинство программистов с ними никогда не столкнётся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2016, 00:54 |
|
||
|
нельзя указать кол-во бит и инициализировать их в новом стандарте
|
|||
|---|---|---|---|
|
#18+
Пётр Седов, ну да.. просто получается, что код, расчитанный строго на 8 бит в байте загнется только из-за этого.. с одной стороны никто не будет его компилить для таких процов, а с другой.. как бы обдино :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2016, 11:46 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39196424&tid=2018571]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 318ms |
| total: | 461ms |

| 0 / 0 |
