Ну, в основном вам нужно заняться грязью с помощью битовых манипуляций.
Почему, в частности, вам нужно сохранить эту структуру?
Если вам нужно только поговорить с устаревшей программой, которая либо говорит на этом диалекте (TCP / IP или аналогичный), либо хранит данные таким образом (файлы и т. Д.), То я бы сопоставил обычную структуру Delphi с бит-версия совместима. Другими словами, я бы использовал нормально структурированную структуру Delphi в памяти и написал бы код для написания и чтения этой структуры совместимым образом.
Если вам нужно сэкономить память, я бы сделал геттеры и сеттеры, которые манипулируют битами внутренних целых чисел или аналогичными. Это будет влиять на производительность, но не намного больше, чем исходная программа на C, единственное отличие состоит в том, что битовая манипуляция будет добавлена магией компилятора в версии C, тогда как вам придется писать ее самостоятельно.
Если у вас мало записей в памяти и вам не нужно общаться с другой программой, я бы использовал естественную структуру Delphi. Компромисс для более высокой производительности будет больше памяти используется.
Но все зависит от ваших критериев.
В любом случае вы не сможете заставить компилятор Delphi выполнять ту же работу за вас, что и компилятор C.
УПАКОВАННАЯ ЗАПИСЬ, предложенная другим здесь, не делает этого и никогда не предназначалась. Он только удалит выравнивающие отступы, чтобы поставить целые числа на 32-разрядных границах и тому подобное, но не упаковывает несколько полей в один байт.
Обратите внимание, что распространенный способ сделать это - через Delphi SETS, которые реализуют внутренне, используя битовые поля. Опять же, у вас будет другой код, чем у варианта C.