@ProCxx

Страница 2124 из 2477
Алексей
11.06.2018
09:32:35
Я так понимаю

Сергей
11.06.2018
09:32:39
Структура вот такая: struct HEADER { unsigned int length : 24; FRAME_TYPE type : 8; BYTE flags : 8; unsigned int stream_id : 32; } header;
А ты пробовал считать/записать в поле длиной 24 бита что нибудь?

Алексей
11.06.2018
09:32:41
Но, видимо неправильно

Сергей
11.06.2018
09:33:30
Точно не скажу но попадалось мне что то такое, и помню оно странно работало с длинными полями.

Google
Алексей
11.06.2018
09:33:36
А ты пробовал считать/записать в поле длиной 24 бита что нибудь?
в него по идее, легко устанавливается целое int32 значение, просто, оно не должно превышать определенное

там ограничение от 214 (16,384) до 224-1 (16.777.215)

заголовок кадра http/2 состоит из 9 октетов. Первые 3, это длина данных, которые идут после заголовка

Сергей
11.06.2018
09:35:43
Ладно, конкретного ничего все равно ничего не скажу, может и правда норм и считает и запишет. Насколько я помню, то ли оно по факту в памяти странно лежало у меня, не так как я ожидал, то ли оно соседние биты перезаписывало.

Дмитрий
11.06.2018
09:35:49
HTTP/2 очень непростой протокол, точно хочешь с нуля накатать? Тем более если пишешь, что в C++ не слишком силён. Я не принижаю нисколечко, скорее предупреждаю.

Алексей
11.06.2018
09:36:15
Я пытался собрать библиотеки и намучился блин с ними.

Дмитрий
11.06.2018
09:36:20
Кажется, вообще трюк с битовыми полями будет в памяти выделять именно инты, а давать тебе будут доступ по битам.

Алексей
11.06.2018
09:36:29
Да мне надо то пару тривиальных запросов в APN отправить

Дмитрий
11.06.2018
09:36:44
То есть int a: 24 выделит 32 бита в памяти, а тебе даст 24 из них

Алексей
11.06.2018
09:36:47
Apple Push

То есть int a: 24 выделит 32 бита в памяти, а тебе даст 24 из них
т.е если копировать подряд, там будет набивка мусором скопирована?

Я думал использовать тип bitset<24> и т.д. Но у него с кнвертацией проблемы

Дмитрий
11.06.2018
09:38:09
Боюсь что да. Поправьте, если не прав, я сам сча пойду перечитывать. И всё-таки зная протоколы, кажется легче найти либу для Apple Push)

Google
Алексей
11.06.2018
09:38:53
Боюсь что да. Поправьте, если не прав, я сам сча пойду перечитывать. И всё-таки зная протоколы, кажется легче найти либу для Apple Push)
Увы, либы есть, подходящее собрать не получилось адекватно. Отчасти из за проблем совместимости boost::asio и openssl 1.1.0

Friedrich
11.06.2018
09:39:12
Я пытался собрать библиотеки и намучился блин с ними.
И поэтому решил ещё больше намучиться и написать свою? :)

Алексей
11.06.2018
09:39:40
Да мне для общего понимания не помешает. Тем более, что уже соединение есть, нужно только 2 фрейма корректно отправить

Даже ответы не нужны

SETTINGS и DATA

Ни потоки по идее реализовывать не надо, ни настройки

Тогда такой вопрос. Если использовать скажем не инты или битсеты, а скажем char[3] для первого поля.

Как ему присваивать значения?

Дмитрий
11.06.2018
09:41:45
Я почитал, там столько implementation defined, что сдохнуть можно.

Алексей
11.06.2018
09:42:00
Скажем для char я могу через & флаги ставить по моему, а сразу в 3 байта как?

Дмитрий
11.06.2018
09:42:21
Я бы просто завёл char-овый буфер и наполнял его через memcpy или похожим.

Alexander
11.06.2018
09:42:42
да, только обязательно маллоком и memcpy

потому что по-другому не принято

Алексей
11.06.2018
09:43:10
Я бы просто завёл char-овый буфер и наполнял его через memcpy или похожим.
Я вот тоже думал, но копировать не целиком структуру, а по очереди, полями. Но только не разобрался как добавлять в конец строки

Аттрибутивно-ассоциативный ряд
11.06.2018
09:43:25
насколько легально объявлять static const MyPODType KPODtype{…}; в заголовочном файле?

Дмитрий
11.06.2018
09:43:46
да, только обязательно маллоком и memcpy
Зачем malloc, если и на стеке помещается (в случае локальных данных)?

Алексей
11.06.2018
09:44:01
Спасибо за дискуссию ребят. Как минимум дали пищу для размышлений

Но я еще тут, если есть какие идеи, буду рад

Кстати, а почему с bitset не работают бинарные операции?

Vhäldemar
11.06.2018
09:50:47
а placement-new не сработает?

Google
Vhäldemar
11.06.2018
09:50:59
но я не настоящий сварщик в таких делах

вместо маллок/фри

Алексей
11.06.2018
09:55:14
пардон, дети отвлекли

Какие именно?
ну вот например &

Sergey
11.06.2018
09:56:09
http://en.cppreference.com/w/cpp/utility/bitset/operator_logic2

Алексей
11.06.2018
09:58:56
Хмм, странно. У меня не работало. А если скажем bitset<N> & int?

или char

Или нужно сперва преобразовать?

Дмитрий
11.06.2018
10:00:20
Я не очень понимаю, что должен дать bitset<?> & char -- "младшие" биты обработать?

Всё-таки bitset это множество бит, а не число нужной разрядности.

Алексей
11.06.2018
10:04:54
кстати, немного дилетанский вопрос. как в char* определяется конец строки? По символу? \n

или это прерогатива std::string

?

Мне очень нужно, чтобы не было никаких лишних символов

Vhäldemar
11.06.2018
10:07:02
по символу /0

Алексей
11.06.2018
10:07:29
т.е он из char* в сокет отправится?

Google
Алексей
11.06.2018
10:07:33
тоже

Vhäldemar
11.06.2018
10:07:35
какая-то дичь , вы там не из строки пытаетесь де-сериализовать?

кто, куда?

там же длина в аргументах, не?

Алексей
11.06.2018
10:08:07
тут что-то сильно пахнет @supapro
пардон, это так, между делом вопрос был)

Vhäldemar
11.06.2018
10:08:13
буфер, длина

Алексей
11.06.2018
10:08:30
буфер, длина
а, ну вообще да...

забыл

Хмм, а почему sizeof(HEADER) дает длину 16 У структуры struct HEADER { bitset<24> length; FRAME_TYPE type : 8; BYTE flags; bitset<32> stream_id; } header;

Vhäldemar
11.06.2018
10:19:16
паддинг?

Max
11.06.2018
10:19:16
выравнивание ?

Alexander
11.06.2018
10:19:44
ещё бы знать, что такое frame_type и byte

Vhäldemar
11.06.2018
10:19:53
та аккуратно надо с этими всеми штуками, будет весело потом дебажить

Alexander
11.06.2018
10:19:59
а так - паддинг скорее всего

Алексей
11.06.2018
10:21:24
ещё бы знать, что такое frame_type и byte
BYTE по идее байт, а FRAME_TYPE - перечисляемый тип

Alexander
11.06.2018
10:21:41
pragma push (pack,1)
шоб ещё это работало на всех компиляторах ?

BYTE по идее байт, а FRAME_TYPE - перечисляемый тип
перечисляемый тип тоже может иметь разный тип под собой

Алексей
11.06.2018
10:22:30
там целые, на как видно из структуры, ограничены одним октетом

Google
Vhäldemar
11.06.2018
10:23:34
я бы был проще и сделал массив байт

Алексей
11.06.2018
10:23:38
та аккуратно надо с этими всеми штуками, будет весело потом дебажить
Я вот щас под окнами, в MSVS пишу (ну просто удобно), собирать потом нужно будет под линухами)

Vhäldemar
11.06.2018
10:23:40
но дело такое

Алексей
11.06.2018
10:23:57
соответственно, все кроссплатформенное только использую

Vhäldemar
11.06.2018
10:24:12
и в каком виде оно кросс-платформ?

Алексей
11.06.2018
10:24:16
И с директивами препроцессору осторожно работать птыаюсь)

и в каком виде оно кросс-платформ?
ну использую либы, котоыре работают там и тут. boost например

Код начинал писаься под линуксом. Сейчас просто в студию перене5с

Andrey
11.06.2018
10:25:46
Если objdump выводит архитектуру "arm", это же 32-битная архитектура?

Sergey
11.06.2018
10:25:57
Нет

Алексей
11.06.2018
10:25:59
я бы был проще и сделал массив байт
а как потом установить целое скажем в 3 первых байта, а потом еще дальше?

А вот с #pragma pack (push, 1) Кстати все правильно Только вот работает ли эта директива в gcc?

Max
11.06.2018
10:35:17
в gcc __attribute__((packed))

Алексей
11.06.2018
10:35:45
главное, чтобы потом собралось

Алексей
11.06.2018
10:38:08
Работает
Спасибо, длина стала корректная, теперь с данными разобраться осталось

Алексей
11.06.2018
10:39:46
В плюсах жеж появились всякие alignof/as.
Ну, я пока не так хорошо все знаю

Спасибо, что подсказали)

Сергей
11.06.2018
10:40:01
Спасибо, длина стала корректная, теперь с данными разобраться осталось
Вспомнил. У меня было поле длиной около 12 бит. И я его разбил на два поля: 8 и 4 бит чтобы оно работало так как я ожидал. Правда все равно не вспомнил что именно было не так.

Anton
11.06.2018
10:40:43
Ну, я пока не так хорошо все знаю
Вперёд на cppreference и штудировать, штудировать и ещё раз штудировать.

Алексей
11.06.2018
10:41:22
Эх, если бы не было 3 дня до сдачи работы и от этого бы не зависела моя ЗП

Страница 2124 из 2477