Существует ли эквивалентный служебный класс для ByteArrayDataInput и ByteArrayDataOutput в C ?

#java #c #c 11 #networking #packet

#java #c #c 11 #сеть #пакет

Вопрос:

Я занимаюсь некоторыми сетевыми операциями, и мне нужна некоторая организация в моих пакетах. Отправлять необработанные байты и не иметь абстракции очень сложно.

Для разработчиков Java, знаете ли вы эквивалентные классы для ByteArrayDataInput и ByteArrayDataOutput в C ?

Если вы не знакомы с ними, не могли бы вы показать мне, как я мог бы их кодировать.

 #pragma once
#include <string>
class packetreader
{
public:
    bool read_bool(int index);

    char read_byte(int index);

    short read_short(int index);

    int read_int(int index);

    long read_long(int index);

    float read_float(int index);

    double read_double(int index);

    std::string read_string(int index);
};
 
 #pragma once
#include <string>
class packetwriter
{
    void write_bool(int index, bool value);

    void write_byte(int index, char value);

    void write_short(int index, short value);

    void write_int(int index, int value);

    void write_long(int index, long value);

    void write_float(int index, float value);

    void write_double(int index, double value);

    void write_string(int index, std::string value);
};
 

Это мои заголовочные файлы, теперь мне нужна помощь в их реализации.
И как я мог бы эффективно выполнять чтение / запись массивов этих типов?
например, write_double_array(массив) и read_double_array(массив)?
Записываем его с помощью write_double(array[i]) для каждого элемента в массиве?
Спасибо.

Комментарии:

1. Существует значительное количество потрясающих c -фреймворков для создания сетей , может ли один из них работать для вас?

2. Я бы предпочел узнать, как создать эту функцию, и понять ее, чтобы я мог воссоздать ее на других языках программирования, но, что наиболее важно, она нужна на C .

3. @purplex что именно вы хотите узнать? считывать данные через сеть? извлекать данные из байтов?

4. Да, у вас есть байты, и извлеките эти данные, которые были вставлены из клиента В ТОМ ЖЕ порядке, в КОТОРОМ они были записаны.

5. если вас беспокоит порядковый номер, просто запишите их побайтно и извлекайте в том же порядке, чтобы не ошибиться.

Ответ №1:

C не имеет стандартного API для работы в сети. Если ваша программа выполняется в операционной системе, то ОС, скорее всего, предоставляет API для работы в сети.

C также не имеет стандартного API для сериализации, для чего, я полагаю ByteArrayData , и предназначены классы. Сериализация может быть реализована с помощью основных арифметических операций.

Комментарии:

1. Как я могу научиться создавать что-то подобное? То, что я хочу, уже существует с открытым исходным кодом? Я не смог найти полную репликацию того, что мне нужно, и я не могу беспокоиться о прокрутке сотен файлов в больших сетевых библиотеках с открытым исходным кодом, чтобы найти эту небольшую функцию.

2. @purplex How can I learn Чтение книг и изучение реализаций с открытым исходным кодом — это варианты. Does what I want already exist open source? Без сомнения. I can't be bothered Похоже, это суть вашей проблемы. to find this small feature Я полагаю, это субъективно, но я бы не стал считать это небольшой особенностью.

3. Я говорю о таких библиотеках, как boost, мне пришлось бы прокручивать сотни файлов, по сравнению с другими материалами, предлагаемыми такими большими библиотеками, этот материал маленький.