1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/xingshuang-iot-communication

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README-ByteArray-EN.md 11 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 5 месяцев назад de05304

ByteArray Parse Tutorial

  1. Annotation Serializer mode

Поддержка BOOL UINT16 INT16 UINT32 INT32 FLOAT32 FLOAT64 STRING read-write

@Data
public class ByteArrayBean {
    @ByteArrayVariable(byteOffset = 0, bitOffset = 0, count = 1, type = EDataType.BOOL)
    Boolean boolData;

    @ByteArrayVariable(byteOffset = 0, count = 1, type = EDataType.BYTE)
    Byte byteData;

    @ByteArrayVariable(byteOffset = 3, count = 1, type = EDataType.UINT16)
    Integer uint16Data;

    @ByteArrayVariable(byteOffset = 3, count = 1, type = EDataType.INT16)
    Short int16Data;

    @ByteArrayVariable(byteOffset = 5, count = 1, type = EDataType.UINT32)
    Long uint32Data;

    @ByteArrayVariable(byteOffset = 9, count = 1, type = EDataType.INT32)
    Integer int32Data;

    @ByteArrayVariable(byteOffset = 13, count = 1, type = EDataType.FLOAT32)
    Float float32Data;

    @ByteArrayVariable(byteOffset = 21, count = 1, type = EDataType.FLOAT64)
    Double float64Data;

    @ByteArrayVariable(byteOffset = 37, count = 3, type = EDataType.STRING)
    String stringData;
}

@Data
public class ByteArrayListBean {

    @ByteArrayVariable(byteOffset = 0, bitOffset = 0, count = 8, type = EDataType.BOOL)
    List<Boolean> boolData;

    @ByteArrayVariable(byteOffset = 1, count = 4, type = EDataType.BYTE)
    List<Byte> byteData;

    @ByteArrayVariable(byteOffset = 1, count = 2, type = EDataType.UINT16)
    List<Integer> uint16Data;

    @ByteArrayVariable(byteOffset = 3, count = 2, type = EDataType.INT16)
    List<Short> int16Data;

    @ByteArrayVariable(byteOffset = 5, count = 2, type = EDataType.UINT32)
    List<Long> uint32Data;

    @ByteArrayVariable(byteOffset = 5, count = 2, type = EDataType.INT32)
    List<Integer> int32Data;

    @ByteArrayVariable(byteOffset = 13, count = 2, type = EDataType.FLOAT32)
    List<Float> float32Data;

    @ByteArrayVariable(byteOffset = 21, count = 2, type = EDataType.FLOAT64)
    List<Double> float64Data;

    @ByteArrayVariable(byteOffset = 37, count = 3, type = EDataType.STRING)
    String stringData;
}

class Demo {
    public static void main(String[] args) {
        ByteArraySerializer serializer = ByteArraySerializer.newInstance();
        byte[] expect = new byte[]{(byte) 0x01,
                // 0, 25689
                (byte) 0x00, (byte) 0x00, (byte) 0x64, (byte) 0x59,
                // 523975585
                (byte) 0x1F, (byte) 0x3B, (byte) 0x3B, (byte) 0xA1, (byte) 0x1F, (byte) 0x3B, (byte) 0x3B, (byte) 0xA1,
                // 33.16f
                (byte) 0x42, (byte) 0x04, (byte) 0xA3, (byte) 0xD7, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
                // 156665.35455556
                (byte) 0x41, (byte) 0x03, (byte) 0x1F, (byte) 0xCA, (byte) 0xD6, (byte) 0x21, (byte) 0x39, (byte) 0xB7,
                (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
                // 23A
                (byte) 0x32, (byte) 0x33, (byte) 0x41};

        ByteArrayBean bean = serializer.toObject(ByteArrayBean.class, expect);
        byte[] actual = serializer.toByteArray(bean);

        expect = new byte[]{(byte) 0x81,
                // 0, 25689
                (byte) 0x00, (byte) 0x00, (byte) 0x64, (byte) 0x59,
                // 523975585
                (byte) 0x1F, (byte) 0x3B, (byte) 0x3B, (byte) 0xA1, (byte) 0x1F, (byte) 0x3B, (byte) 0x3B, (byte) 0xA1,
                // 33.16f, -15.62f
                (byte) 0x42, (byte) 0x04, (byte) 0xA3, (byte) 0xD7, (byte) 0xC1, (byte) 0x79, (byte) 0xEB, (byte) 0x85,
                // 156665.35455556
                (byte) 0x41, (byte) 0x03, (byte) 0x1F, (byte) 0xCA, (byte) 0xD6, (byte) 0x21, (byte) 0x39, (byte) 0xB7,
                // -56516.66664
                (byte) 0xC0, (byte) 0xEB, (byte) 0x98, (byte) 0x95, (byte) 0x55, (byte) 0x1D, (byte) 0x68, (byte) 0xC7,
                // 23A
                (byte) 0x32, (byte) 0x33, (byte) 0x41};

        ByteArrayListBean listBean = serializer.toObject(ByteArrayListBean.class, expect);
        actual =

В запросе используется язык Java. 2. Arbitrary Combination Serializer mode

serializer.toByteArray(listBean);
    }
}

2. Режим произвольного комбинированного сериализатора

class Demo {
    public static void main(String[] args) {
        byte[] src = new byte[]{(byte) 0x81,
                // 0, 25689
                (byte) 0x00, (byte) 0x00, (byte) 0x64, (byte) 0x59,
                // 523975585
                (byte) 0x1F, (byte) 0x3B, (byte) 0x3B, (byte) 0xA1, (byte) 0x1F, (byte) 0x3B, (byte) 0x3B, (byte) 0xA1,
                // 33.16f, -15.62f
                (byte) 0x42, (byte) 0x04, (byte) 0xA3, (byte) 0xD7, (byte) 0xC1, (byte) 0x79, (byte) 0xEB, (byte) 0x85,
                // 156665.35455556
                (byte) 0x41, (byte) 0x03, (byte) 0x1F, (byte) 0xCA, (byte) 0xD6, (byte) 0x21, (byte) 0x39, (byte) 0xB7,
                // -56516.66664
                (byte) 0xC0, (byte) 0xEB, (byte) 0x98, (byte) 0x95, (byte) 0x55, (byte) 0x1D, (byte) 0x68, (byte) 0xC7,
                // 23A
                (byte) 0x32, (byte) 0x33, (byte) 0x41};

        List<ByteArrayParameter> list = new ArrayList<>();
        list.add(new ByteArrayParameter(0, 0, 1, EDataType.BOOL));
        list.add(new ByteArrayParameter(0, 0, 1, EDataType.BYTE));
        list.add(new ByteArrayParameter(3, 0, 1, EDataType.UINT16));
        list.add(new ByteArrayParameter(3, 0, 1, EDataType.INT16));
        list.add(new ByteArrayParameter(5, 0, 1, EDataType.UINT32));
        list.add(new ByteArrayParameter(9, 0, 1, EDataType.INT32));
        list.add(new ByteArrayParameter(13, 0, 1, EDataType.FLOAT32));
        list.add(new ByteArrayParameter(21, 0, 1, EDataType.FLOAT64));
        list.add(new ByteArrayParameter(37, 0, 3, EDataType.STRING));

        ByteArraySerializer serializer = ByteArraySerializer.newInstance();
        List<ByteArrayParameter> bean = serializer.extractParameter(list, src);
    }
}

Перевод:

2. Произвольный комбинированный режим сериализации

Код на языке Java:

Demo {
    public static void main(String[] args) {
        // Создаём массив байтов
        byte[] src = new byte[]{0x81, // 0, 25689
            0x00, 0x00, 0x64, 0x59, // 523975585
            0x1f, 0x3b, 0x3b, 0xa1, 0x1f, 0x3b, 0x3b, 0xa1, // 33.16f, -15.62f
            0x42, 0x04, 0xa3, 0xd7, 0xc1, 0x79, 0xeb, 0x85, // 156665.35455556
            0x41, 0x03, 0x1f, 0xca, 0xd6, 0x21, 0x39, 0xb7, // -56516.66664
            0xc0, 0xeb, 0x98, 0x95, 0x55, 0x1d, 0x68, 0xc7, // 23a
            0x32, 0x33, 0x41
        };

        // Создаём список объектов ByteArrayParameter
        List<ByteArrayParameter> list = new ArrayList<ByteArrayParameter>();
        list.add(new ByteArrayParameter(0, 0, 1, EDataType.BOOL)); // Добавляем объект в список
        list.add(new ByteArrayParameter(0, 0, 1, EDataType.BYTE)); // Добавляем ещё один объект в список
        ...
        // И так далее

        // Создаём экземпляр класса ByteArraySerializer
        ByteArraySerializer serializer = ByteArraySerializer.newInstance();

        // Вызываем метод extractParameter для извлечения параметров из списка и массива байтов
        List<ByteArrayParameter> bean = serializer.extractParameter(list, src);
    }
}

В этом коде создаётся массив байтов src, который содержит данные различных типов. Затем создаётся список list объектов ByteArrayParameter, каждый из которых представляет собой параметр с определённым типом данных.

Далее создаётся экземпляр класса ByteArraySerializer, после чего вызывается метод extractParameter для извлечения параметров из списка list и массива src.

Полученный результат сохраняется в списке bean.

3. Byte Parse Tool

Вы можете использовать инструмент ByteReadBuff, когда необходимо преобразовать большой объём данных в виде массива байтов в желаемые данные. Инструмент использует по умолчанию режим big-endian и DCBA для анализа 4-байтовых данных, которые можно изменить в соответствии с требованиями.

3.1 Boolean data type

class Demo {
    public static void main(String[] args) {
        ByteReadBuff buff = new ByteReadBuff(new byte[]{(byte) 0x55});
        // Извлекаем логические данные, внутренний индекс автоматически перемещается назад
        boolean b1 = buff.getBoolean(0);
        // Получаем данные по указанному адресу байтового индекса
        boolean b2 = buff.getBoolean(0, 1);
    }
}

3.2 Byte data type

class Demo {
    public static void main(String[] args) {
        ByteReadBuff buff = new ByteReadBuff(new byte[]{(byte) 0x55, (byte) 0x33, (byte) 0x22});
        // Извлекаем байт
        buff.getByte();
        // Извлекаем два байта
        byte[] actual = buff.getBytes(2);
        assertArrayEquals(new byte[]{(byte) 0x33, (byte) 0x22}, actual);

        buff = new ByteReadBuff(new byte[]{(byte) 0x55, (byte) 0x33, (byte) 0x22});
        // Извлекаем байт
        buff.getByte();
        // Извлекаем все оставшиеся байты
        actual = buff.getBytes();
        assertArrayEquals(new byte[]{(byte) 0x33, (byte) 0x22}, actual);
    }
}

3.3 Uint16 data type

class Demo {
    public static void main(String[] args) {
        ByteReadBuff buff = new ByteReadBuff(new byte[]{(byte) 0x5F, (byte) 0xF5});
        int actual = buff.getUInt16();
        assertEquals(24565, actual);
    }
}

3.4 Int16 data type

class Demo {
    public static void main(String[] args) {
        ByteReadBuff buff = new ByteReadBuff(new byte[]{(byte) 0x5F, (byte) 0xF5});
        short actual = buff.getInt16();
        assertEquals(24565, actual);
    }
}

3.5 Uint32 data type

class Demo {
    public static void main(String[] args) {
        ByteReadBuff buff = new ByteReadBuff(new byte[]{(byte) 0x00, (byte) 0x20, (byte) 0x37, (byte) 0x36});
        long actual = buff.getUInt32();
        assertEquals(2111286L, actual);
    }
}

3.6 Int32 data type

class Demo {
    public static void

Этот текст относится к области разработки программного обеспечения и связан с анализом и обработкой данных. В тексте используются термины и понятия, связанные с программированием на Java, такие как массивы, списки, классы, методы и т. д. Также упоминаются инструменты и библиотеки для работы с данными, например ByteArraySerializer и ByteReadBuff.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/xingshuang-iot-communication.git
git@gitlife.ru:oschina-mirror/xingshuang-iot-communication.git
oschina-mirror
xingshuang-iot-communication
xingshuang-iot-communication
master