
Алексей
11.06.2018
09:32:35
Я так понимаю

Сергей
11.06.2018
09:32:39

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

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

Google

Алексей
11.06.2018
09:33:36
там ограничение от 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
Я думал использовать тип bitset<24> и т.д. Но у него с кнвертацией проблемы

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

Google

Алексей
11.06.2018
09:38:53

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

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

Дмитрий
11.06.2018
09:43:46

Алексей
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
но я не настоящий сварщик в таких делах
вместо маллок/фри

Sergey
11.06.2018
09:51:44

Алексей
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

Alexander
11.06.2018
10:07:03
тут что-то сильно пахнет @supapro

Алексей
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

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:20:00

Алексей
11.06.2018
10:21:24

Alexander
11.06.2018
10:21:41

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

Google

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

Алексей
11.06.2018
10:23:38

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
И с директивами препроцессору осторожно работать птыаюсь)
Код начинал писаься под линуксом. Сейчас просто в студию перене5с

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

Sergey
11.06.2018
10:25:57
Нет

Алексей
11.06.2018
10:25:59
А вот с #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:37:37

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

Anton
11.06.2018
10:39:08

Алексей
11.06.2018
10:39:46
Спасибо, что подсказали)

Сергей
11.06.2018
10:40:01

Anton
11.06.2018
10:40:43

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