Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
Convertir Hexadecimal A Decimal (SOLUCIONADO)
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Convertir Hexadecimal A Decimal (SOLUCIONADO) 
 
Hola soy nuevo en gambas, y necesito su ayuda... El problema es el siguiente: estoy recibiendo por puerto Ethernet una cadena de caracteres en hexadecimal y necesito convertirlos a decimal. espero me ayuden
 



 
última edición por MiguelVelandia el Domingo, 05 Septiembre 2010, 21:22; editado 1 vez 
MiguelVelandia - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Convertir Hexadecimal A Decimal 
 
Hola.

dim iDireccion as integer

iDireccion=Cint(&f)

La variable queda con el valor entero 15.

Saludos
 



 
abarzuaf - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Convertir Hexadecimal A Decimal 
 
Hola,


La conversion corre correctamente, pero lo que quiero hacer es convertir el valor de una variable, estoy probando y no me funciona...


Saludos
 



 
MiguelVelandia - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Convertir Hexadecimal A Decimal 
 
  DIM iDireccion AS Integer
  DIM sHexa AS String = "&f"

  iDireccion = CInt(Val(sHexa))
  PRINT iDireccion
 

 




===================
Cómo programar con Gambas

Speed Books: informática libre.
 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Convertir Hexadecimal A Decimal 
 
Gracias...

Funciona perfectamente... Explicare lo que debo hacer más detalladamente. Debo recibir por medio de un socket tcp y por puerto serial una cadena de caracteres hexadecimales que lo recibo desde una Central de Alarma, que me identifican un evento de alarma...

Un ejemplo de la trama en hexadecimal es el siguiente: 1234 18 1131 01 015 8

Cada parte de la trama aporta alguna informacion del evento, y necesito poder dividir o separar la trama como se muestra en el ejemplo, y no tengo idea de como hacer, he leido algunos tutoriales pero no lo muestra. Es decir,

Variable1=1234
Variable2=18
Variable3=1131
.
.
.
Variable6= 8

Puesto que con cada variable debo hacer una consulta a la base de dato e identificará la informacion del evento de alarma....


Saludos...
 



 
MiguelVelandia - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Convertir Hexadecimal A Decimal 
 
Si el carácter de separación es el espacio en blanco, deberías usarlo como parámetro de la función Split

  
  FUNCTION Str2Hexa(pInput AS String) AS Integer[]
    DIM aInput AS String[] = Split(pInput, " ", "", TRUE) 'el segundo parámetro de Split es un espacio en blanco y el tercero una cadena vacía
    DIM item AS String
    DIM result AS NEW Integer[]
    
    FOR each item IN aInput
      result.Add(Cint(Val(item)))
    NEXT
  
    RETURN result
  END
 


Esta función te devolvería un array dinámico de tipo Integer con los valores en formato numérico y convertidos a decimales.

No dejes de leer la documentación de Split, Integer[] y String[].
 




===================
Cómo programar con Gambas

Speed Books: informática libre.
 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Convertir Hexadecimal A Decimal 
 
Bien, la probé, pero como se haria si la trama no viene con esos espacios en blancos, es decir "1234181131010158", sino que necesitas dividirlos en subcadenas que varian en su longitud de caracteres (ejemplo: a:1234, b:18, c:1131, d:01, e:015, f:8)... ¿Existe alguna función como en c# en la que obtienes una subcadena de otra cadena, de a partir de X posicion, Y caracteres?
Le agradezco su respuesta.
 



 
MiguelVelandia - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Convertir Hexadecimal A Decimal 
 
Hola Miguel

Toda la información sobre el protocolo Contact-ID la tienes aquí:

http://www.smartelectron.ru/files/DC-05_Contact_ID.pdf

Desconozco la manera en que te llegan las tramas, si es con espacios o sin ellos. En cualquier caso te recomiendo eliminar los espacios de la cadena mediante la función Replace ( http://gambasdoc.org/help/lang/replace?es ). Por ejemplo:

laTrama = Replace("1234 18 1131 01 015 8", " ", "")


De esta manera laTrama valdrá 1234181131010158 y entonces será más fácil emplear las funciones de cadenas para extraer y/o posicionarnos en un determinado carácter, ya que el número de caracteres es siempre invariable.

Por ejemplo para extraer el número de abonado (account code), que son los 4 primeros caracteres:

sAccount = Left$(laTrama, 4)
' sAccount valdrá 1234
 


Luego puedes usar Mid$ para extraer por ejemplo los 2 siguientes caracteres, que corresponden al Tipo de Mensaje (que siempre será 18 ó 98) de esta forma:

sMsgType = Mid$(laTrama, 5, 2)
' sMsgType será = 18
 


Extraemos 2 caracteres a partir del 5º incluyendo éste.

Y así sucesivamente, viene muy bien explicado en la página 5 del pdf de Ademco - Contact-ID

Otra cosa a tener en cuenta es la comprobación de la validez de la trama mediante el último dígito, que es el Checksum o suma de verificación.
La fórmula para saber si es válida es:

(suma de todos los dígitos + digito de checksum) MOD 15 = 0

Es decir, sumando los 15 dígitos más el propio dígito de control, si lo dividimos entre 15 (que es el nº de dígitos totales excluyendo el de control) el resto de la división debe ser igual a 0. A tener en cuenta que si el dígito es un cero, habrá que interpretarlo como si fuera 10 para sumarlo.

Otra cosa es que el único grupo que puede contener caracteres hexadecimales creo que es sólo el primero (4 primeros caracteres) y que representa el identificador de un cliente. Se debe guardar tal cual en la base de datos, y solo será necesario convertirlo a entero a la hora de hacer la suma de verificación. El resto siempre son números (según recuerdo).

Por lo tanto lo primero es verificar la validez de la trama y si no es válida, salir del procedimiento, y sólo si lo es, analizarla y guardarla en la BD.

Bueno, si tienes más dudas vuelve a preguntar. Podría ayudarte con la función para iterar sobre los caracteres y sumarlos,

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Convertir Hexadecimal A Decimal 
 
Hola,

Excelente información me acabas de dar... Aclaraste muchas cosas, ademas sabes lo que necesito hacer, manejas la información. Voy a probar...

Gracias
 



 
MiguelVelandia - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Convertir Hexadecimal A Decimal 
 
Algo sé sobre el tema... llevo 20 años trabajando en el sector de Sistemas de Seguridad

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 

Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron