elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  conversion de tipos.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: conversion de tipos.  (Leído 2,684 veces)
kondrag_X1

Desconectado Desconectado

Mensajes: 157


Ver Perfil
conversion de tipos.
« en: 5 Agosto 2015, 21:12 pm »

Hola tengo una dudilla a ver si me pueden echar una mano.

tengo un array de bytes que me llega de un dispositivo Bluetooth
Código
  1. byte[] scandRecord ={9,9,65,114,113,117,101,116,97,0,3,3,-1,-1,5,-1,15,60,112
  2. ,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  3. 0,0,0,0,0,0,0,0,0,0,0,0,0};
  4.  

yo se que la información que me tiene que llegar va a ser unsigned y de 8 bites por eso no entiendo porque aparece el -1, debería aparecer f = 255 2^7-1 que es lo que ha sido enviado en el dispositivo.

Como podría yo comparar estos valores si estoy haciendo una comparación en hex.
es decir 0xf con -1.

hasta ahora comparaba cogiendo el tipo?

switch(byte)
     case 0xff:

pero no me funciona?

PD: creo que son las horas delante de la pantalla las que demuestran mi idiotez.



En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: conversion de tipos.
« Respuesta #1 en: 5 Agosto 2015, 22:16 pm »

Pero ese código no es lo que te llega, eso es una variable a la que tú le has asignado unos valores ._.


En línea

kondrag_X1

Desconectado Desconectado

Mensajes: 157


Ver Perfil
Re: conversion de tipos.
« Respuesta #2 en: 5 Agosto 2015, 22:31 pm »

si, los valores que le he asignado a la variable son lo que me llegan y los valores estan formando un paquete como explica aquí:

http://j2abro.blogspot.com.es/2014/06/understanding-bluetooth-advertising.html

yo separo los campos del byte array que hay arriba y hay 3 paquetes pero no se como puedo comparar el tipo.

obtener los paquetes del payload advertisement
Código
  1. public static List<AdRecord> parseScanRecord(byte[] scanRecord) {
  2.        List<AdRecord> records = new ArrayList<AdRecord>();
  3.  
  4.        int index = 0;
  5.        while (index < scanRecord.length) {
  6.            int length = scanRecord[index++];
  7.            //Done once we run out of records
  8.            if (length == 0) break;
  9.  
  10.            int type = scanRecord[index];
  11.            //Done if our record isn't a valid type
  12.            if (type == 0) break;
  13.  
  14.  
  15.            byte[] data = Arrays.copyOfRange(scanRecord, index + 1, index + length);
  16.  
  17.            records.add(new AdRecord(length, type, data));
  18.            //Advance
  19.            index += length;
  20.        }
  21.  
  22.        return records;
  23.    }
  24.  
por si el código le sirve a alguien.
A alguien se le ocurre como?
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: conversion de tipos.
« Respuesta #3 en: 5 Agosto 2015, 23:41 pm »

Teniend en cuenta que byte es signed, lo que puedes hacer para comparar, es pasarlo a int.
Puedes pasarlo a int con:
Código
  1. int n = b&0xff;
En línea

kondrag_X1

Desconectado Desconectado

Mensajes: 157


Ver Perfil
Re: conversion de tipos.
« Respuesta #4 en: 6 Agosto 2015, 00:42 am »

a pués no había caído que byte de java es con signo. haciendo eso que me comentas tendría que dar 255, verdad?

mi duda ahora es, s recibo datos unsigned cuando mire otra vez el array de bytes puedo encontrarme numero negativos o sólo aparecerá el -1?

En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: conversion de tipos.
« Respuesta #5 en: 6 Agosto 2015, 13:35 pm »

Habrá otros números. Todo depende del tipo de datos binarios que estés tratando.

Con "& 0xff", convertimos el byte a int, y le aplicamos esa máscara, que solo nos dejará los últimos 8 bites (lo que buscamos). Además como es int, que tiene unos 32 bites, no será negativo, pues el bit de signo es el primero empezando desde la izquierda.

Simplemente asegúrate de aplicarle la máscara a cada byte antes de tratarlo. Y ten en cuenta, que tras aplicale la máscara, se convertirá en int.
En línea

kondrag_X1

Desconectado Desconectado

Mensajes: 157


Ver Perfil
Re: conversion de tipos.
« Respuesta #6 en: 7 Agosto 2015, 16:21 pm »

Código:
tenias toda la razón del mundo y muchísimas gracias el problema venia que no hacia bien la conversión cuando guardaba el tipo de paquete por eso no me lo reconocía haciendo eso que explicas se soluciona el problema.
[/code=java]
public static List<AdRecord> parseScanRecord(byte[] scanRecord) {
        List<AdRecord> records = new ArrayList<AdRecord>();
 
        int index = 0;
        while (index < scanRecord.length) {
            int length = scanRecord[index++] & 0xFF;
            //Done once we run out of records
            if (length == 0) break;
 
            int type = scanRecord[index] & 0xFF;
            //Done if our record isn't a valid type
            if (type == 0) break;
 
 
            byte[] data = Arrays.copyOfRange(scanRecord, index + 1, index + length);
 
            records.add(new AdRecord(length, type, data));
            //Advance
            index += length;
        }
 
        return records;
    }

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Conversión . mov a .avi
Multimedia
Sakura85 1 2,381 Último mensaje 9 Junio 2004, 03:48 am
por Songoku
conversion de wmv a avi
Multimedia
Lemmy 1 1,822 Último mensaje 29 Junio 2005, 14:12 pm
por arda-lothi
¿Conversion &H?
Programación Visual Basic
DarkCompany96 2 2,503 Último mensaje 15 Abril 2012, 16:53 pm
por DarkCompany96
Tipos Valor y Tipos Referencia(Solucionado)
.NET (C#, VB.NET, ASP)
Senior++ 5 3,752 Último mensaje 4 Noviembre 2014, 01:38 am
por DarK_FirefoX
Conversión tipos float a U_int8
Programación C/C++
kondrag_X1 4 1,909 Último mensaje 24 Agosto 2015, 00:17 am
por kondrag_X1
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines