Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
VlGuvin
0 / 0 / 4
Регистрация: 04.08.2015
Сообщений: 225
1

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

05.03.2017, 12:22. Просмотров 200. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2017, 12:22
Ответы с готовыми решениями:

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

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

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

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

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

2
HighPredator
5689 / 2008 / 723
Регистрация: 10.12.2010
Сообщений: 5,774
Записей в блоге: 3
13.03.2017, 14:02 2
Тут в принципе никакой магии в общем-то. Например можно так сделать:
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
VlGuvin
0 / 0 / 4
Регистрация: 04.08.2015
Сообщений: 225
13.03.2017, 18:40  [ТС] 3
Спасибо. Помогло. Работает.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2017, 18:40

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

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

int vs byte or short
Всем привет. Вот такой код public class Test { public static void main(String args) {...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru