@ProCxx

Страница 850 из 2477
Александр
09.05.2017
12:23:49
Народ, подскажите. Пишу свой костыль, храню pod-типы в обычном uint8_t[]. Когда кастю их к чему-то конкретному, возникают баги, что объекты побитово одинаковые, а вот == даёт false. Я так понимаю, это из-за UB - как пофиксить? clang 5.0

Square
09.05.2017
12:27:39
потому что == для твоих pod типов не определен мб?

вообще сумбурно написал, переформулировать бы...

Google
Square
09.05.2017
12:29:06
а еще алигн может давать такую хрень
да по дефолту я с такой дичью сталкивался только с packed record в делфях

не кидайте помидорами ток за паскакаль)

Александр
09.05.2017
12:33:55
Сейчас объясню. Есть динамический массив uint8_t. Пусть размер = 4, использую для хранения int32_t. Для работы с битовым представлением запилил метод std::bitset<32>& Bits() { return *(std::bitset<32>*)ptr_to_raw; }. Вроде как std::bitset хранит биты последовательно, поэтому выдачу я получаю нормальную выдачу при std::cout << obj.Bits() << std::endl;

Friedrich
09.05.2017
12:34:05
не кидайте помидорами ток за паскакаль)
Нам как-то раз интеропиться надо было с дельфовой прогой. Пришлось на асме писать, потому что наш C++-компилятор не умел в pascal calling convention.

Александр
09.05.2017
12:38:41
BE LE учитываются?
Там везде одинаковый endian, не суть

Square
09.05.2017
12:39:54
Там везде одинаковый endian, не суть
а чо с чем сравниваете то?

"нормальный" int32_t со своим?

Александр
09.05.2017
12:40:37
а чо с чем сравниваете то?
foo.Bits() == bar.Bits(); Иногда при одинаковом содержимом даёт false. Сейчас отлавливаю момент

Google
Александр
09.05.2017
12:43:11
Я догадываюсь, что всё это UB и зависит от реализаций библиотеки

Antony
09.05.2017
12:44:38
А еще от реализаций компилятора, длины машинного слова, endianness, содержимого вашего POD и десятка ключей компиляции

Surreal
09.05.2017
12:45:04
Спокойствие, это для себя. Нужна обертка для оперирования битами произвольного pod-типа
Храните в uint32, через побитовые операции обращайтесь к битам. Перегрузите просто оператор [].

Александр
09.05.2017
12:45:59
Храните в uint32, через побитовые операции обращайтесь к битам. Перегрузите просто оператор [].
Так мне хранить нужно не только int32_t, а еще бы std::array<> и прочие pod-типы. Хочу синтаксис bitset

Мне на самом деле всё равно, лишь бы для одинаковых объектов было одинаковое представление.

Aidar
09.05.2017
12:50:01
Ммм

Александр
09.05.2017
12:50:06
Да это всё понятно. Я не хочу с нуля делать интерфейс bitset'а

Aidar
09.05.2017
12:50:10
Типобезопасненько

Surreal
09.05.2017
12:51:03
Мне на самом деле всё равно, лишь бы для одинаковых объектов было одинаковое представление.
Сделать массив uint8, перегрузить операторы [], == и др. Для сета битов делить номер бита на 8, отсчитывать нужный элемент массива uint8 и т.д.

Aidar
09.05.2017
12:51:17
По-моему в таких случаях просто делают юнион с uint8_t[0] но это тоже пахнет уб

Antony
09.05.2017
12:51:30
Не будет работать. Найдите две причины почему

Alex Фэils?︙
09.05.2017
12:53:14
Не будет работать. Найдите две причины почему
алигн внутри структурок, и разная хрень в pad-битах/байтах

Александр
09.05.2017
12:53:40
а что конкретно надо сделать?
Страшно рассказывать :D

Surreal
09.05.2017
12:53:45
Но тут детерминированная реализация зато.

Alex Фэils?︙
09.05.2017
12:53:51
Страшно рассказывать :D
а еще битсет ни фига не POD

Evgeniy
09.05.2017
12:54:08
Google
Evgeniy
09.05.2017
12:54:08
проще помочь будет

Александр
09.05.2017
12:54:44
Окей. Хочу попробовать реализацию генетического алгоритма, манипулируя исключительно битами, не смотря на структуру хранения. Хрень выйдет или нет

Andrei
09.05.2017
12:54:51
Мне кажется это типичный пример http://xyproblem.info/

Evgeniy
09.05.2017
12:56:14
Александр
09.05.2017
12:56:19
Юнион с массивом
Юнион - опять же нужно писать манипуляторы с битами

Aidar
09.05.2017
12:56:29
И что

Александр
09.05.2017
12:56:30
Я в курсе про XY, но знаю, чего хочу)

Admin
ERROR: S client not available

Evgeniy
09.05.2017
12:56:56
напиши функции делающие эти операции

Andrei
09.05.2017
12:57:00
Зачем? Меня что-нибудь слышит?

пусть конструирует bitset!!!!

У него есть конструктор.

Aidar
09.05.2017
12:57:23
Пусть конструирует битсет

Александр
09.05.2017
12:57:30
Зачем? Меня что-нибудь слышит?
Я слышу. А из double? Из std::array<std::array<double, 5>, 5>?

Evgeniy
09.05.2017
12:57:49
пусть конструирует bitset!!!!
изменить и назад? ?

Andrei
09.05.2017
12:58:12
Если тебе известен размер, битсета, делаешь reinterpret_cast

Google
Andrei
09.05.2017
12:58:23
И по 8 байт сдвигая копируешь

Получаешь свой замечательный битсет.

Aidar
09.05.2017
12:59:25
Александр
09.05.2017
12:59:27
Отнаследоваться от битсета и добавить конструкторов?)

Evgeniy
09.05.2017
12:59:55
Отнаследоваться от битсета и добавить конструкторов?)
я б написал функции которые работают с масками

Andrei
09.05.2017
13:00:55
я б написал функции которые работают с масками
Он хочет STL-интерфейс битсета и не думать больше ни о чём.

Alexander
09.05.2017
13:00:58
Я может пропустил мгновение, но почему человек не может написать простую функцию для сериализации его структуры в в набор битов?

Evgeniy
09.05.2017
13:01:50
Александр
09.05.2017
13:01:53
Не сработает, да и сишный каст почти такой же

Alexander
09.05.2017
13:02:21
Aidar
09.05.2017
13:02:24
Чозадичь

Alexander
09.05.2017
13:02:28
?

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