Converter de \u0002 para STX e vice-versa

A algum tempo atrás aqui no forum foi-me passado que a notação STX (hexa 02) seria o equivalente a “u0002”, agora eu preciso em tempo de execução ler o caracter que vem como um simbolo que representa o \u0002 em Java e passar para STX e vice-versa pegar em determinada hora o STX e convertar em \u0002 no Java que resulta em um caracter em ASCII.

Tem como fazer isso?

Ora, pois, pois.

char stx = '\u0002';
byte STX = (byte) stx;

Certo isso me retorna 2 que é o valor hexa dessa notação. Mas eu tenho o caracter tipo uma carinha sorrindo (é só digitar ALT+2 no DOS) e quero buscar a conversão até chegar a STX e partir do STX até chegar a carinha sorrindo.

É isso que eu preciso fazer dentro do Java.

Ora, mas um char é um número de 2 bytes no Java. Se eu estivesse falando em C++ diria que um char do Java é um wchar_t do C++ (equivalente a um unsigned short). Ainda não entendi o que a representação visual (a tal caretinha) tem a ver com o dado representado (o número 2, ou o byte 2 = STX).

É que é o seguinte:
Recebo da balança vários blocos de dados, e preciso pegar em especial dois blocos e ignorar os demais.
A sequencia de blocos interessantes seria:

número de bytes: 4
<STX>=p`
número de bytes: 4
0025
número de bytes: 8
02535852

Consigo pegar o número de bytes de cada linha mas vem vários linhas que inúteis com os mesmos números de bytes.

Tentei fazer um if dessa forma:

char stx = '\u0002';
    byte STX = (byte) stx;
    
    if (Dadoslidos.substring(0, 4).equals(stx + "=p`")){
        if (nodeBytes == 4){
            System.out.println(Dadoslidos);
        }else if (nodeBytes == 8){
            System.out.println(Dadoslidos);
        }
    }

Onde dados lidos recebe o stream da balança e o nodeBytes eu capturo o número de bytes de cada linha.

Mas dessa forma só imprime na minha tela o conteúdo de stx + “=p`”, quando que na verdade eu queria a impressão dos dois outros conteúdos.

Se vc puder dar uma força.

Você tem certeza que os 4 primeiros bytes são os que você me diz que são?
Eu prefiro trabalhar totalmente com arrays de bytes, para evitar alguns problemas que surgem quando se converte de / para strings.
Outra coisa: para evitar ficar "chutando", eu sempre que trabalho com arrays de bytes imprimo-os com um utilitário de "dump".
Aqui no fórum eu devo ter postado uma rotina cujo nome é printHex, e vou repeti-la aqui porque se perdeu no "Big GUJ Crash":

    static void printHex(byte[] b) {
        if (b == null) {
            System.out.println ("(null)");
        } else {
        for (int i = 0; i < b.length; ++i) {
            if (i % 16 == 0) {
                System.out.print (Integer.toHexString ((i & 0xFFFF) | 0x10000).substring(1,5) + " - ");
            }
            System.out.print (Integer.toHexString((b[i]&0xFF) | 0x100).substring(1,3) + " ");
            if (i % 16 == 15 || i == b.length - 1)
            {
                int j;
                for (j = 16 - i % 16; j > 1; --j)
                    System.out.print ("   ");
                System.out.print (" - ");
                int start = (i / 16) * 16;
                int end = (b.length < i + 1) ? b.length : (i + 1);
                for (j = start; j < end; ++j)
                    if (b[j] >= 32 && b[j] <= 126)
                        System.out.print ((char)b[j]);
                    else
                        System.out.print (".");
                System.out.println ();
            }
        }
        System.out.println();
        }
    } 

Existe o método Arrays.equals, você pode usá-lo para comparar arrays de bytes.

Certo, eu usei a sua função e dentre muito lixo retornou isso:

0000 - 02 3d 70 60 00 00 00 00 00 00 00 00 00 00 00 00  - .=p`............
0010 - 00 00 00 00                                      - ....

0000 - 30 30 33 38 00 00 00 00 00 00 00 00 00 00 00 00  - 0038............
0010 - 00 00 00 00                                      - ....

0000 - 32 35 30 30 30 30 30 30 00 00 00 00 00 00 00 00  - 25000000........
0010 - 00 00 00 00                                      - ....

Agora tentei usar a função equal() para o Array só que não virou, pelo que vi na documentação ele retorna true para igualdade ou false para diferença como nunca usei essa função fiquei um pouco perdido sobre como tratar o retorno para pegar na Array o 0038 e o 25000000.