es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Conversión de arreglo de bytes a cadena de texto.

Estoy haciendo una aplicación de Android que se comunica con un dispositivo bluetooth. Estoy escribiendo un mensaje específico en la característica seleccionada de la siguiente manera:

byte[] clearDataset = new byte [0x0A];
Log.d("uploadDataset", "Mensaje: " + Converters.byteArrayToHexString(clearDataset, 0, clearDataset.length));
writeCharacteristic(Converters.byteArrayToHexString(clearDataset, 0, clearDataset.length), Constants.DIAG_WRITE);

Mi función de conversión luce así:

public static String byteArrayToHexString(byte[] bytes, int startingByte , int endingByte) {
        byte[] shortenBytes = Arrays.copyOfRange(bytes, startingByte, endingByte);
        final byte[] HEX_ARRAY = "0123456789ABCDEF".getBytes(StandardCharsets.US_ASCII);
        byte[] hexChars = new byte[shortenBytes.length * 2];
        for (int j = 0; j < shortenBytes.length; j++) {
            int v = shortenBytes[j] & 0xFF;
            hexChars[j * 2] = HEX_ARRAY[v >>> 4];
            hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F];
        }

        StringBuilder output = new StringBuilder();

        for (int i = 0; i < new String(hexChars, StandardCharsets.UTF_8).length(); i += 2) {
            String str = new String(hexChars, StandardCharsets.UTF_8).substring(i, i + 2);
            output.append((char) Integer.parseInt(str, 16));
        }

        return output.toString();
}

Estoy tratando de entender por qué en este caso la salida de mi conversión se ve así:

D/uploadDataset: Mensaje: ��������������������

Es extraño, porque la misma función de conversión funciona perfectamente bien cuando la uso para traducir los valores que recibo como notificaciones bluetooth. Cualquier sugerencia sobre dónde puede estar el problema es bienvenida.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Posibles razones para la salida de conversión extraña

    Podría haber varias razones para la salida de conversión extraña en este caso. Aquí hay algunas posibles:

    1. Valores incorrectos de startingByte y endingByte pasados a la función byteArrayToHexString al llamarla en el método writeCharacteristic. Esto podría resultar en copiar la parte incorrecta del arreglo de bytes, dando lugar a una salida incorrecta.
    2. Es posible que la clase Converters no esté implementada correctamente, lo que podría llevar a una salida incorrecta. Es posible que la misma función de conversión funcione bien al recibir valores como una notificación Bluetooth, pero no al enviar un mensaje a una característica elegida.

    3. Es posible que el método writeCharacteristic esté implementado incorrectamente, lo que podría llevar a una salida incorrecta. Es posible que el mensaje no se esté enviando correctamente a la característica elegida, dando lugar a una salida extraña.

    Pasos adicionales para solucionar el problema

    Para solucionar el problema de manera adicional, se podrían realizar los siguientes pasos:

    1. Verificar nuevamente los valores de startingByte y endingByte pasados a la función byteArrayToHexString al llamarla en el método writeCharacteristic. Asegurarse de que sean los valores correctos para la parte del arreglo de bytes que necesita ser convertida.

    2. Revisar la clase Converters en busca de cualquier error o fallo que pueda estar causando la salida extraña. Verificar nuevamente todos los métodos de conversión en la clase para asegurarse de que estén implementados correctamente.

    3. Revisar el método writeCharacteristic en busca de cualquier error o fallo que pueda estar causando la salida extraña. Asegurarse de que el mensaje se esté enviando correctamente a la característica elegida.

    4. Intentar utilizar un método de conversión diferente para convertir el arreglo de bytes en una cadena, y ver si eso funciona mejor. Por ejemplo, se podría utilizar el método Hex.encodeHexString de la biblioteca commons-codec.

    5. Utilizar herramientas de depuración como puntos de interrupción y registros para acotar el problema y ver de dónde podría provenir. Esto podría ayudar a identificar la causa raíz de la salida extraña.

Comments are closed.