Autore Topic: Conversione da String a byte array e viceversa, risultato caratteri errati  (Letto 138 volte)

Offline darioconcilio

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
Ciao a tutti,
mi trovo con un problema apparentemente banale (ma anche no)  ;-)

Sto usando le librerie per BLE della RedBear (il problema non è il BLE),
in un metodo ricevo la String del messaggio da mandare, poi converto in array byte e aggiungo all'inizio e la fine STX ed ETX.

Non capivo perché al mio dispositivo non arrivava niente, quando ho scoperto che riconvertendo l'array di byte in String non ho il messaggio, o meglio, i caratteri non sono più quelli. Dato che sono nuovissimo di Java, anche se ho basi solide in programmazione ad oggetti, mi faccio dubbi in merito ad una cosa molto base.

Codice (Java): [Seleziona]
private void sendData(String command) {

        //Mi appare correttamente il contenuto di command (ovviamente)
        Toast.makeText(this,command,Toast.LENGTH_SHORT).show();

        //Non importante per questo post
        BluetoothGattCharacteristic characteristic = map.get(RBLService.UUID_BLE_SHIELD_TX);

        //Costruisco la versione in byte[]
        byte b = 0x00;
        byte[] tmp = command.getBytes();
        byte[] tx = new byte[tmp.length + 1 + 2];
        tx[0] = b;
        tx[1] = (byte) 0x02; //ETX
        for (int i = 2; i < tmp.length + 1; i++) {
            tx[i] = tmp[i - 1];
        }
        tx[tmp.length + 1 + 1] = (byte) 0x03; //STX

        //Se mando questo al Service per BLE funziona correttamente...
        //Se passo a questo metodo "W", invece, non viene convertito correttamente
        byte[] tx2 = new byte[] {(byte)0x00, (byte)0x02, (byte)'W', (byte)0x03};

        //Mi esce questo "����", Android Studio indica UTF-8 come codifica dell'editor
        Log.d("LOG",new String(tx));

        //Il message toast appare vuoto
        Toast.makeText(this,new String(tx),Toast.LENGTH_SHORT).show();

        //Non importante per il post
        try {
            characteristic.setValue(tx);
            mBluetoothLeService.writeCharacteristic(characteristic);
        } catch (Exception e) {
            Log.e("LOG",e.getMessage().toString());
        }
    }

Per i test sto usando un ALCATEL Pixi (Android 4.4.2)
Che può essere? Problemi di codifica?

PS: Ho allegato un piccolo screen-shots, perché non sapevo se allegando il log apparivano i caratteri come appaiono a me.
« Ultima modifica: 13 Novembre 2016, 14:10:31 CET da darioconcilio »

Offline darioconcilio

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
Re:Conversione da String a byte array e viceversa, risultato caratteri errati
« Risposta #1 il: 20 Novembre 2016, 23:33:03 CET »
0
Ho trovato il problema, ecco il metodo riscritto correttamente, nel ciclo for non era correttamente gestito l'indice dell'array... banale lo so.

Codice (Java): [Seleziona]
private void sendData(String command) {

        //Toast.makeText(this,command,Toast.LENGTH_SHORT).show();

        BluetoothGattCharacteristic characteristic = map
                .get(RBLService.UUID_BLE_SHIELD_TX);

        int lengthMessage = command.length();
        byte[] tx = new byte[lengthMessage + 2];
        byte[] commandArray = command.getBytes();

        tx[0] = (byte)0x02;

        for(int i = 0; i < commandArray.length; i++)
            tx[i+1] = commandArray[i];

        tx[lengthMessage + 1] = (byte)0x03;

//        for(int i = 0; i < tx.length; i++)
//            Log.d("LOG", new String(new byte[]{tx[i]}));

        try {
            characteristic.setValue(tx);
            mBluetoothLeService.writeCharacteristic(characteristic);
        } catch (Exception e) {
            Log.e("LOG",e.getMessage().toString());
        }
    }