Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
-13 / 6 / 6
Регистрация: 04.08.2015
Сообщений: 622

Поиск byte в матрице byte []

05.03.2017, 12:22. Показов 645. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется матрица типа
Java
1
byte[] arrReadComByte;
в которой первые два байта всегда равны 0xa1 0xa2
В матрице нужно найти первые два байта и далее запихнуть в int вторые два байта которые говорят о последующем количестве байт в матрице. Делается так:
Java
1
2
3
4
5
6
7
8
9
10
11
....
        int comCount;
        int comLenght; 
        byte[] arrReadComByte;
....
                        for(int i = 0; i < comCount; i++){
                            if(arrReadComByte[i] == 0xa1 && arrReadComByte[i + 1] == 0xa2){
                                comLenght = (arrReadComByte[i + 2] << 8 | arrReadComByte[i + 3]) + 4;
                                System.out.println(comLenght);
                            }
                        }
Никак не могу перестроиться из char в byte.
Выше приведенная конструкци работает только если
Java
1
if(arrReadComByte[i] == -95 && arrReadComByte[i + 1] == -94)
Как в Java можно работать с char (hex) не заморачиваясь с byte?
Не врубаюсь в чем был великий смысл все в Java строить на byte, а не на привычных unsigned (signed) char?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.03.2017, 12:22
Ответы с готовыми решениями:

Byte[] to 0 and 1
Вечер добрый. Вопрос простой, но я решения не нашел: Как конвертировать массив byte в массив 0 и 1 любого формата. ( будь то char,...

Byte[]
есть массив байт (byte data = new byte) int (0&lt;=x&lt;=999), он переводится в String, потом этот String в массив data, потом снова в String,...

Int в byte
как поместить Integer переменную в массив байт? (желательно с примером)

2
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
13.03.2017, 14:02
Тут в принципе никакой магии в общем-то. Например можно так сделать:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
public class Main {
    private static final int INDEX_NOT_FOUND = -1;
 
    private static int getTwoBytes(final byte bytes[]) {
        final byte marker[] = {(byte) 0xA1, (byte) 0xA2};
 
        final int markerStartIndex = findFirstSequence(bytes, marker);
 
        final byte parts[] = Arrays.copyOfRange(bytes, markerStartIndex + 2, markerStartIndex + 4);
 
        int result = ((parts[0] & 0xFF) << 8) | (parts[1] & 0xFF);
 
        return result;
    }
 
    private static int findFirstSequence(final byte bytes[], final byte sequence[]) {
        int sequenceStartIndex = INDEX_NOT_FOUND;
 
        for (int i = 0; i < bytes.length - sequence.length; i++) {
            if (bytes[i] == sequence[0]) {
 
                if (partsAreEqual(Arrays.copyOfRange(bytes, i, i + sequence.length), sequence))
                    sequenceStartIndex = i;
            }
        }
 
        if (sequenceStartIndex == INDEX_NOT_FOUND)
            throw new NoSuchElementException();
 
        return sequenceStartIndex;
    }
 
    private static boolean partsAreEqual(final byte firstPart[], final byte secondPart[]) {
        boolean areEqual = true;
 
        int i = 0;
        while ((i < secondPart.length) && areEqual) {
            if (firstPart[i] != secondPart[i])
                areEqual = false;
            i++;
        }
 
        return areEqual;
    }
 
    public static void main(String[] args) {
        final byte bytes[] = {
                (byte) 0xAA, (byte) 0xBF, (byte) 0x00, (byte) 0x11, (byte) 0x2A, (byte) 0xA1, (byte) 0x00, (byte) 0xA1,
                (byte) 0xA2, (byte) 0xA2, (byte) 0x03, (byte) 0x22
                //                    ^------------^------- >> --> 0xA203
        };
 
        try {
            int result = getTwoBytes(bytes);
            System.out.println("Assembled integer: " + result + "(" + Integer.toHexString(result) + ")");
        } catch (NoSuchElementException e) {
            System.out.println("Mask not found");
        }
    }
}
1
-13 / 6 / 6
Регистрация: 04.08.2015
Сообщений: 622
13.03.2017, 18:40  [ТС]
Спасибо. Помогло. Работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.03.2017, 18:40
Помогаю со студенческими работами здесь

Из 4-х Byte в int
Здравствуйте!!! Програмлю для себя программу, которая читает любой файл и выводит его в виде таблицы из окошек, в которых находятся все...

Byte в java
Здравствуйте! Почему при преобразовании int s = 250; System.out.println((byte)s); в результате вывод: -6 Спасибо!

Float[] в byte[]
Да, я знаю, так делать не нужно. Да, я знаю, часть информации может быть потеряна. Я точно знаю, что численное значение переменной...

Преобразование byte[] в int[]
Передаю по сети массив int'ов int -&gt; byte делаю так: os.write(data.toString().getBytes()); А как преобразовать byte обратно в int не...

переменные типа byte
public class Test { public static void main(String args) { byte b = 12; byte k = b + 1; System.out.println(k); } }


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru