Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2021, 13:23   #11
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

например, так
Код:
#include <vector>
#include <iostream>
#include <iomanip>
using std::cin;
using std::cout;

class Value
{
    #pragma pack(push,1)
        struct s_packet
        {
            struct s_input
            {
                uint64_t L : 32;
                uint64_t Sh : 16;
                uint64_t Ch : 8;
                uint64_t B : 1;
                uint64_t reserv : 7;
            };
            
            union
            {
                uint64_t body64{};
                s_input  bits;
            }AcceptorInput;

            union
            {
                uint64_t body64{};
                s_input  bits;
            }WritingInput;
        };
        #pragma pack(pop)

public:
    s_packet m_packet;

    /*Считать: датаграмму-приемник, записываемое значение, и смещение*/

    void GetInput()
    {
        cin >> std::hex >> std::uppercase >> std::setfill('0');
        cout << "Enter acceptor value: "; cin >> std::setw(8) >> m_packet.AcceptorInput.body64;
        cout << "Enter writing value: " ; cin >> std::setw(8) >> m_packet.WritingInput.body64;
    };
};

/*Вызов членов и вывод результатов вычислений*/

int main()
{
    Value a;
    a.GetInput();

    return 0;
};
Алексей1153 вне форума Ответить с цитированием
Старый 17.03.2021, 13:59   #12
GrimHex
Пользователь
 
Аватар для GrimHex
 
Регистрация: 14.08.2019
Сообщений: 65
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
GrimHex, то есть, формата нет ещё? Ну хотя бы на словах - что должно быть в пакете
Заголовки сетевых протоколов и поля сетевых пакетов. Если это будет библиотека, то я решил, что без формата эта библиотека будет более автономной.
GrimHex вне форума Ответить с цитированием
Старый 17.03.2021, 14:15   #13
GrimHex
Пользователь
 
Аватар для GrimHex
 
Регистрация: 14.08.2019
Сообщений: 65
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
например, так
Код:
#include <vector>
#include <iostream>
#include <iomanip>
using std::cin;
using std::cout;

class Value
{
    #pragma pack(push,1)
        struct s_packet
        {
            struct s_input
            {
                uint64_t L : 32;
                uint64_t Sh : 16;
                uint64_t Ch : 8;
                uint64_t B : 1;
                uint64_t reserv : 7;
            };
            
            union
            {
                uint64_t body64{};
                s_input  bits;
            }AcceptorInput;

            union
            {
                uint64_t body64{};
                s_input  bits;
            }WritingInput;
        };
        #pragma pack(pop)

public:
    s_packet m_packet;

    /*Считать: датаграмму-приемник, записываемое значение, и смещение*/

    void GetInput()
    {
        cin >> std::hex >> std::uppercase >> std::setfill('0');
        cout << "Enter acceptor value: "; cin >> std::setw(8) >> m_packet.AcceptorInput.body64;
        cout << "Enter writing value: " ; cin >> std::setw(8) >> m_packet.WritingInput.body64;
    };
};

/*Вызов членов и вывод результатов вычислений*/

int main()
{
    Value a;
    a.GetInput();

    return 0;
};
А как насчет вычисления новых значений? В общих чертах, "writing value" и "writing value", должны применяться к определенному исходному значению.
GrimHex вне форума Ответить с цитированием
Старый 17.03.2021, 14:50   #14
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

GrimHex, техзадание по-прежнему туманное
Алексей1153 вне форума Ответить с цитированием
Старый 18.03.2021, 08:37   #15
GrimHex
Пользователь
 
Аватар для GrimHex
 
Регистрация: 14.08.2019
Сообщений: 65
По умолчанию

Поразрядная запись значения требуется. Поразрядная запись значения полного типа данных. Или даже дозапись.

В "AcceptorBfInputLL" это значение должно записаться. Дописаться с заменой.
В "WritingBfInputCh" это значение содержится.
В "OffsetBfInputCh" содержится номер разряда.

Код:
{ AcceptorBfInputLL |= (WritingBfInputCh << OffsetBfInputCh); }  /*Не работает*/
Кажется, битовые поля и STL, только отвлекают от сущности битовых операций. Мне не важно даже какой входной пакет будет обрабатывать программа. В названии темы я писал "битовые операции".
GrimHex вне форума Ответить с цитированием
Старый 18.03.2021, 09:37   #16
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

Цитата:
Сообщение от GrimHex Посмотреть сообщение
Кажется, битовые поля и STL, только отвлекают от сущности битовых операций
это всё тут ни при чём.

Нужно сначала решить, какой формат данных - на данный момент в теме нет описания формата.

пока этого нету, непонятно вообще, что нужно сделать.
Алексей1153 вне форума Ответить с цитированием
Старый 18.03.2021, 09:58   #17
GrimHex
Пользователь
 
Аватар для GrimHex
 
Регистрация: 14.08.2019
Сообщений: 65
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
Нужно сначала решить, какой формат данных - на данный момент в теме нет описания формата.

пока этого нету, непонятно вообще, что нужно сделать.
Двоичный (бинарный) формат. Файл - ".bin". Если это тот формат, который имелся в виду. Слово "формат" - омоним.
GrimHex вне форума Ответить с цитированием
Старый 18.03.2021, 10:04   #18
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

GrimHex, файлы - они все без исключения двоичные ))

формат - это способ размещения данных в памяти/файле

Например, вот формат заголовка TCP
https://ru.wikipedia.org/wiki/Transm...1%82%D0%B0_TCP
Алексей1153 вне форума Ответить с цитированием
Старый 18.03.2021, 10:22   #19
GrimHex
Пользователь
 
Аватар для GrimHex
 
Регистрация: 14.08.2019
Сообщений: 65
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
GrimHex,

формат - это способ размещения данных в памяти/файле
Цель моей программы - дать пользователю возможность определить формат самостоятельно.
GrimHex вне форума Ответить с цитированием
Старый 18.03.2021, 10:46   #20
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

GrimHex, вот, уже смысл стал начинать прорисовываться

Значит, данные могут быть описаны в виде списка элементов.

Каждый элемент содержит:
-смещение от начала своего родительского элемента
-длину данных в битах
-дополнительную инфу (например, класс данных)

класс данных может включать вложенный список элементов
Алексей1153 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
в переменной типа word (b15b14...b1b0) биты 0..4 содержат двоичный код ,который обозначим как А,биты 5..7-код,который обозначим ка Юлия123456 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 07.06.2016 06:33
как разбить текст на биты......... Xchel Помощь студентам 17 17.04.2016 22:05
Как получить средние биты 32х битного числа? Larboss Общие вопросы Delphi 7 23.05.2013 10:05
Как перевести биты в мегабайты? Юзер7 Свободное общение 7 19.06.2009 17:27
Как избавиться от зависания приложения при выполнении длительных операциях Des Общие вопросы Delphi 15 30.04.2009 02:05