🦥Alex Fails
#define BIT_VAL(val, mask, off) (((val)&(mask))<<(off))
А вот такой вариант можно еще так сделать:
Anonymous
Но я не знаю как представляется bool
🦥Alex Fails
uint32_t *val = BIT_VAL(dbg_lastbit, 1, 31) | BIT_VAL(dbg_sz, 31, 1);
🦥Alex Fails
Но я не знаю как представляется bool
На самом деле там полный бздец. В отладчике меняешь значение sz в той биовой структуре, и меняется еще и флаг тот!
🦥Alex Fails
😱
Anonymous
короч я бы так не делал
🦥Alex Fails
В итоге математика тупая: dbg_sz * (flag ? -1: 1)
🦥Alex Fails
короч я бы так не делал
Как именно? Я три варианта предложил
Anonymous
откажись от була
Anonymous
вообще
Square
а чо вы сделать то хотите?
🦥Alex Fails
Блин. Напоролся на херню с битовымиьполями в Си
🦥Alex Fails
Пришлось битовые операции юзать
🦥Alex Fails
Было так:
🦥Alex Fails
struct PathSzBot { uint32_t val:31; uint32_t flag: 1; }
🦥Alex Fails
PathSzBit *z = (PathSzBit *)&out_paths.buf[off]; bool dbg_lastbit = (cur_path.size() % 2) != 0; uint32_t dbg_sz = get_size_for_one_path(p.at(i).path.size()); // 31 бит по факту! z->lastbit = dbg_lastbit; z->sz = dbg_sz; bool dbg2_lastbit = z->lastbit; uint32_t dbg_sz2 = z->sz; assert(dbg_sz2 == dbg_sz); assert(dbg_lastbit == dbg2_lastbit); // тут пиздец
🦥Alex Fails
А итоге решил тупо юзать знаковые числа🙈
🦥Alex Fails
Это похоже на баг в компиляторе
🦥Alex Fails
Он асм код неверный делает, я вот ща смотрю(
Anonymous
я не понимаю что ты хочешь сделать, но это выглядит страшно
🦥Alex Fails
Ща поясню
Anonymous
а еще ты бул используешь не для true false
Stanislav
я вот тоже по коду не понял что делается)
🦥Alex Fails
У меня есть несжатая структура
Anonymous
я вижу что интовой переменной присваивается значение бул
Anonymous
которое хрен знает какое при приведении типа
Anonymous
нет
Anonymous
в сях 0 это false , а все остальное включая -1 -1488 это true
Anonymous
есть спецификация на bool
🦥Alex Fails
там жестко 1
🦥Alex Fails
у меня прописывается
Anonymous
нет, смотри
Anonymous
у тебя идет следущее
Anonymous
bool a = (bool) 1;
Anonymous
что происходит при приведении типа хз
Anonymous
читай доку на комп
🦥Alex Fails
хм..
🦥Alex Fails
по ходу, да, каст
Anonymous
может ты и прав
🦥Alex Fails
лан, ща я напишу, что надо сделать
Anonymous
но идеологически bool a = (bool) 1; может привести к тому что у тебя по адрессу a будет лежать значение 1488
🦥Alex Fails
в общем, вот задача: Есть приходящая структура несжатых данных по 8 байт. В этих 8 байтах два енама по 4 байта. У всех енамов диапазон значений умещается в [0;7].
Anonymous
там типа хрен знает сколько он занимает байт реально по стандарту
🦥Alex Fails
enum class uint32_t
🦥Alex Fails
C++11
🦥Alex Fails
Так. Дальше..
🦥Alex Fails
2. Надо 8 байт сжать в 1 байт. Делаем! 4 верхних бита - одно значение из массива, 4 нижних - второе.
🦥Alex Fails
в сжатом потоке сначала хранится размер сжатых данных в формате struct { uint32_t count :31; uint32_t flag :1; // показывает ,что в последнем байте у нас верхние 4 бита не используются }
🦥Alex Fails
мне надо записать заголовок, но при записи неверно получается
Anonymous
блин
🦥Alex Fails
лан, я отойду, с планшета буду
Anonymous
смотри что можно сделать
Anonymous
struct f_u { a char[8]; }
Anonymous
приводи к ней указатель на твою структуру и обращайся нормально как с байтами
Anonymous
зачем тебе сжимать что то
Anonymous
и показывать что какие то биты не используются
Anonymous
у тебя же все одноозначно
Anonymous
что в структуре два енама
Square
меня уже в сон лепит, но проверь чтоб у тебя не было никаких оптимизаций. я помню как то сращивал дллку на делфи и плюсовый код, долго вдуплял в чем бида. а оказалось на том конце packed record была
Square
я реально в этой лапше потерялся из твоего кода
🦥Alex Fails
struct f_u { a char[8]; }
С самими енамвми все понятно
🦥Alex Fails
Заголовок неверно соьирается
🦥Alex Fails
В общем, я им скажу, чтоб другой заголовок был
🦥Alex Fails
uint32_t count;
🦥Alex Fails
,и все
🦥Alex Fails
По каунту сайз легко читается
🦥Alex Fails
Лан, ок, спс всем)
🦥Alex Fails
В пзду программирование в 5 утра после трех дней без сна
🦥Alex Fails
В общем, вот тест на компилятор: struct fuck { uint32_t val:31; uint32_t flag:1; }; struct fuck fuck; memset(&fuck, sizeof(fuck), 0); uint32_t flag = 1; uint32_t val = 2; fuck.val = val; fuck.flag = flag; uint32_t v3 = fuck.val; uint32_t f2 = fuck.flag; assert(v3 == val); assert(flag == f2);
🦥Alex Fails
В этом коде как раз ошибка с установлением полей была
Square
#mindfuck
🦥Alex Fails
И всякие були и пр не при чем
Square
Это я для себя тег поставил - потом вернусь)
🦥Alex Fails
😂👍
🦥Alex Fails
Собственно, речь об этом была. А я чет от бессонных ночей очень херово выразил суть проблемы
Square
А ты где живёшь что у тебя пять утра?