Autor Tema: conversion de valores hexagesimales  (Leído 3043 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
conversion de valores hexagesimales
« en: 27 de Enero de 2011, 11:44:59 »
hola.sabria alguien decirme si conoce algun programa que manipule los bytes de una secuencia de ellos.

lo que quiero es un programa que en el cual pueda poner una trama de datos hexagesimales y los dibida en palabras.y posteriormente invertir los bytes.
es algo asi:

12ab34cd56ef -> 0x12ab, 0x34cd, 0x56ef -> 0xab12, 0xcd34, 0xef56

estaba pensando hacerlo en labview.pero llevo tiempo sin programar y me costaria bastante adaptarme.


Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17907
    • MicroPIC
Re: conversion de valores hexagesimales
« Respuesta #1 en: 27 de Enero de 2011, 18:52:45 »
¿Un programa para PC, o para micro?, ¿te vale en C?
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: conversion de valores hexagesimales
« Respuesta #2 en: 27 de Enero de 2011, 18:59:52 »
Hoy tengo tiempo libre. Puedo escribir el programa en C# y darte el EXE. Sólo avísame.  ;-)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: conversion de valores hexagesimales
« Respuesta #3 en: 28 de Enero de 2011, 11:11:56 »
es un programa para PC.en el que quiero copiar de un txt los valores en hexagesimal y pegarlos en el programa.y posteriormente obtener las correcciones.

el motivo es porque quiero capturar tramas ethernet en el wireshark.y pegarlas en una tabla DATA en asm para un pic.

ejemplo de trama:
001eec59ea400010602636020809

conversion:

DATA     0x1e00,0x59ec,0x40ea,0x1000,0x2660,0x0236,0x0908

me bendria perfecto que solo hubiera que copiar y pegar.seria todo mas rapido pero me conformo conque se realize la inversion de los bytes.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado dolphin_96

  • PIC12
  • **
  • Mensajes: 73
    • Ezkybel Electronics
Re: conversion de valores hexagesimales
« Respuesta #4 en: 28 de Enero de 2011, 13:53:53 »
Que tal hice tu programita espero que te sirva.

tambien subo el codigo fuente por si quieres modificarlo, esta echo en VB 6.0, asi como el ejecutable.
solo pones el codigo en la primer venta le das a convertir y despues en el boton de "copiar al portapapeles" y ya le das pegar donde quieras
'*******************************************************
Private Sub Command1_Click()
Convertir (Text1)
End Sub

Sub Convertir(Cadena As String)
Dim Result As String
Dim Dato As String

Result = "DATA   "

For i = 1 To Len(Cadena) Step 4
    Dato = Mid(Cadena, i, 4)
    Result = Result & "0x" & Swap(Dato) & ","
Next i
    Text2 = Left(Result, Len(Result) - 1)     'Le quita la ultima ","
End Sub


Function Swap(Dato As String) As String       'Invierte los bytes
    Swap = Mid(Dato, 3, 2) & Mid(Dato, 1, 2)
End Function

Private Sub Command2_Click()                  'Copia Text2 en el portapapeles de Windows
    Clipboard.Clear
    Clipboard.SetText Text2.Text
    MsgBox "El texto ha sido copiado en el portapapeles", vbInformation, "Copiado"
End Sub
Visiten: www.xbot.es/ezkybel tengo tutoriales para pics con visual basic...:)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: conversion de valores hexagesimales
« Respuesta #5 en: 28 de Enero de 2011, 18:42:35 »
muchas gracias dolphin_96.   :-/ como se nota que cada uno es maestro en su oficio.
habria tardado en realizar el programa.ya que el poco tiempo de que dispongo lo vuelco enteramente en programar en asm.
guardare tu programa como oro en paño.  :D

y gracias tambien a los demas por poner empeño.

aunque tu programa sirve a la perfeccion.habria alguna forma de que el resultado se mostrara de esta forma:

DATA   0X1000,0X2660,0X0236,0X1E00,0X59EC,0X40EA,0X0008,0X0045,0X2E00,0X1E05,0X0040,0X0680,0X0000
DATA   0XA8C0,0X3601,0XA8C0,0X2B01,0XACC1,0XC618,0X37CF,0X9189,0X0E22,0X8226,0X1850,0X2940,0XD283
DATA   0X0000,0X6F68,0X616C,0X0A0D

en vez de una sola linea? teniendo la posibilidad de elegir cuantas palabras contener en en cada linea.de esta forma el texto queda preparado para pegarlo
directamente en el codigo.

solo te lo sugiero si no te va a dar mucho trabajo.no quedria abusar de tu amabilidad por tu tiempo prestado. :lol:


Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado dolphin_96

  • PIC12
  • **
  • Mensajes: 73
    • Ezkybel Electronics
Re: conversion de valores hexagesimales
« Respuesta #6 en: 28 de Enero de 2011, 18:48:18 »
claro que si no hay problema
Se me ocurrio algo mas sencillo y retome el codigo que te habia hecho,
es hacerlo en excel en una macro a ver que te parece.

saludos
« Última modificación: 28 de Enero de 2011, 19:24:41 por dolphin_96 »
Visiten: www.xbot.es/ezkybel tengo tutoriales para pics con visual basic...:)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: conversion de valores hexagesimales
« Respuesta #7 en: 28 de Enero de 2011, 19:24:16 »
depende de la trama ethernet que capture.el maximo que tiene una trama ethernet es de 1500bytes
pero todo lo mas que voy a trabajar es de 64bytes aunque hay tramas de 150bytes.depende de la aplicacion que valla a realizar.

lo que si que seria necesario es que en cada linea resultante no hubiera mas de 16 palabras (32bytes) porque si no.los caracteres se pasarian de la zona de trabajo de la pantalla.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: conversion de valores hexagesimales
« Respuesta #8 en: 28 de Enero de 2011, 20:50:39 »
la verdad es que el primer programa lo entiendo mejor que la hoja excel.me parece mejor opcion. ;-)
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado dolphin_96

  • PIC12
  • **
  • Mensajes: 73
    • Ezkybel Electronics
Re: conversion de valores hexagesimales
« Respuesta #9 en: 28 de Enero de 2011, 21:19:38 »
el codigo es axactamente lo mismo, solo aprime ctrl+F11, para que lo veas, solo le agrgue un ciclo que busca el final de lo que se pone en la columna 1. no es necesario que pongas tu informacion renglon por renglon, copia exactamente todo lo que tengas en el archivo de texto, y pegalo en la celda A3, y automaticamente se acomodara en los renglones, despues le das click al boton de convertir, y lo que se genera en la columna 3 lo copias y lo pegas donde quieras a mi me parece mucho mejor la opcion de excel ya que no hay limite de renglones ni de tamño de caracteres.
recuerda que la informacion debe pegarse a partir de la celda A3 y que el programa parara hasta que encuentre una celda vacia en dicha columna, en caso de que tengas problemas con las macros debes de deshabilitar la seguridad de las macros, en Herramientas/macros/seguridad  y ahi las deshabilitas

el codigo es el siguiente y se encuentra en un modulo:

'*****************************************************************
Sub Convertir()
Dim Result As String
Dim Dato As String
Dim Y As Byte

Y = 3
While Cells(Y, 1) <> ""
    Result = "DATA   "
    For i = 1 To Len(Cells(Y, 1)) Step 4
        Dato = Mid(Cells(Y, 1), i, 4)
        Result = Result & "0x" & Swap(Dato) & ","
    Next i
    Cells(Y, 2) = Left(Result, Len(Result) - 1)    'Le quita la ultima ","
    Y = Y + 1
Wend
End Sub

Function Swap(Dato As String) As String       'Invierte los bytes
    Swap = Mid(Dato, 3, 2) & Mid(Dato, 1, 2)
End Function

'*****************************************************************

y un boton que solo tiene el siguiente codigo. y llama la rutina "convertir"
'*******************************************************************
Private Sub CommandButton1_Click()
Convertir
End Sub
'********************************************************************
« Última modificación: 28 de Enero de 2011, 21:27:14 por dolphin_96 »
Visiten: www.xbot.es/ezkybel tengo tutoriales para pics con visual basic...:)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: conversion de valores hexagesimales
« Respuesta #10 en: 29 de Enero de 2011, 19:13:40 »
he hecho lo que dices en la hoja de excel.pero al hacer clic en el boton,no sucede nada.y eso que he pegado los datos en la casilla a3
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado dolphin_96

  • PIC12
  • **
  • Mensajes: 73
    • Ezkybel Electronics
Re: conversion de valores hexagesimales
« Respuesta #11 en: 31 de Enero de 2011, 11:33:01 »
Debe ser el office , yo le he probado en office 2003 y 2007 y funciona bien en ambas, pero aqui te envio otra version en VB en la cual puedes meter mas lineas,
saludos

'*****************************************************************************
Private Sub Command1_Click()
Convertir
End Sub

Sub Convertir()
    Dim Result As String
    Dim Cont As Byte
    Dim Linea() As String
    Dim Dato As String
    
    Result = ""
    Linea = Split(Text1.Text, vbCrLf)            'Separa las lineas de Text1 en strings independientes
    
    For Cont = 0 To UBound(Linea)               'Hasta el final de text1
        For i = 1 To Len(Linea(Cont)) Step 4    'Hasta el final de la linea
            Dato = Swap(Mid(Linea(Cont), i, 4))
            Result = Result & "0x" & Dato & ","
        Next i
        Cadena = Cadena & "DATA   " & Left(Result, Len(Result) - 1) & vbCrLf 'Suma la cadena y quita la ultima ","
        Result = ""
    Next Cont
    
    Text2 = Cadena
    
End Sub

Function Swap(Dato As String) As String       'Invierte los bytes
    Swap = Mid(Dato, 3, 2) & Mid(Dato, 1, 2)
End Function

Private Sub Command2_Click()                  'Copia Text2 en el portapapeles de Windows
    Clipboard.Clear
    Clipboard.SetText Text2.Text
    MsgBox "El texto ha sido copiado en el portapapeles", vbInformation, "Copiado"
End Sub


'*****************************************************************************
« Última modificación: 31 de Enero de 2011, 11:38:57 por dolphin_96 »
Visiten: www.xbot.es/ezkybel tengo tutoriales para pics con visual basic...:)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: conversion de valores hexagesimales
« Respuesta #12 en: 31 de Enero de 2011, 18:04:24 »
yo me referia a meter una sola linea a la entrada y mediante un valor numerico seleccionable en una casilla poder tener a la salida las lineas que pudieran
caber segun el numero seleccionado

por ejemplo si el valor en la casilla fuera 8 quedaria asi:

DATA   0xff00,0xffff,0xffff,0x00ff,0xa304,0x0000,0x0800,0x0006
DATA   0x0801,0x0600,0x0004,0x0001,0xa304,0x0000,0xc000
DATA   0x01a8,0x006e,0x0000,0x0000,0xc000,0x01a8,0x002b
DATA   0x00

y si fuera 16 quedaria asi:

DATA   0xff00,0xffff,0xffff,0x00ff,0xa304,0x0000,0x0800,0x0006,0x0801,0x0600,0x0004,0x0001,0xa304,0x0000,0xc000
DATA   0x01a8,0x006e,0x0000,0x0000,0xc000,0x01a8,0x002b, 0x00

de todas formas tu programa va de perlas.y te agradezco tu aportacion.



Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: conversion de valores hexagesimales
« Respuesta #13 en: 20 de Febrero de 2011, 17:15:02 »
hola de nuevo dolphin_96.tu programa me ha venido de maravilla.

pero analizando el programa que he realizado.veo que es muy complicado gestionar las tramas para aprender de ellas.si para comparar los valores tenemos
que cambiar el orden de los bytes.
por eso queria pedirte si no es mucha molestia.si podrias modificar tu programa para que una serie de bytes quedaran de la siguiente forma sin invertir los bytes.

123456789012345678901234567890123456789012345678901234567890..............

asi

DATA       0x1234,0x5678,0x9012,0x3456,0x7890,0x1234,0x5678,0x9012
DATA       0x3456,0x7890,0x1234,0x5678,0x9012,0x3456,0x7890,0x1234
DATA       0x5678,0x9012,0x3456,0x7890,0x1234,0x5678,0x9012,0x3456

es decir.agrupar la linea de numeros que puede llegar a contener hasta 4000 ciflas.en lineas DATA de 8 palabras de 2byes.o almenos separar la linea de cifras
en grupos de 4 numero separados por 0x  .  asi 0x1234,0x5678,..........

si no puedes no te preocupes.me tendria que poner de nuevo con el vbasic.tardaria bastante pero supongo que al final lo lograria. 

saludos




« Última modificación: 20 de Febrero de 2011, 17:24:34 por groundman »
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado dolphin_96

  • PIC12
  • **
  • Mensajes: 73
    • Ezkybel Electronics
Re: conversion de valores hexagesimales
« Respuesta #14 en: 21 de Febrero de 2011, 10:39:20 »
Hola, eso ya lo puedes hacer facil con los  codigo que te envie: solo es cosa de cambiar la funcion swap y quedaria asi, solo compilalo y ya queda te envio el codigo, asi le puedes hacer las modificaciones que quieras y se te ocurran en un futuro.

saludos.

'*****************************************************************************

Function Swap(Dato As String) As String       'no Invierte los bytes
    Swap =  Mid(Dato, 1, 2) & Mid(Dato, 3, 2)
End Function

'*****************************************************************************
« Última modificación: 21 de Febrero de 2011, 13:43:31 por dolphin_96 »
Visiten: www.xbot.es/ezkybel tengo tutoriales para pics con visual basic...:)