Autor Tema: Como extraigo los bytes de un longint por separado???  (Leído 1495 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado beto0350

  • PIC12
  • **
  • Mensajes: 58
Como extraigo los bytes de un longint por separado???
« en: 02 de Agosto de 2009, 16:58:29 »
Hola:

    tengo un campo longint y quiero descomponerlo en 4 bytes independientes para poder operarlos y luego desde esos 4 bytes recomponer el mismo longint
en otro momento.

 Alguna sugerencia por favor.

  Gracias

Desconectado ASTROCAR

  • PIC24F
  • *****
  • Mensajes: 664
Re: Como extraigo los bytes de un longint por separado???
« Respuesta #1 en: 03 de Agosto de 2009, 09:09:06 »
Hola buenos dias, oye colega nose a que lenguaje de compilador te refieres pero en proton un longint es un DWORD que no es mas que una variable de 32bit es decit 4 byte como tu bien lo dices y lo que quieres es hacer la separacion de esos 4 byte se puede hace de la manera manual o comentanos que compilador de basic estas usando yo en lo pensonal lo he hecho con proton pero para los word y es muy simple con lowbyte y highbyte pero eso es en proton uy para una variable word que  solo son 16bit es decir 2 byte pero lo podriamos hacer de forma manual aplicando un and pero es cuestion de ponerse si gusta con gusto lo desarrolo para proton.

Saludos.
Atten.
Alexander santana.
Barcelona-venezuela.
EL APRENDER ES NADA; MEJOR ES COMPARTIR EL APRENDIZAJE

Desconectado alexysar

  • PIC16
  • ***
  • Mensajes: 206
    • e-Kit
Re: Como extraigo los bytes de un longint por separado???
« Respuesta #2 en: 03 de Agosto de 2009, 12:30:17 »
Cómo se hace concretamente depende del lenguaje que uses, es decir, si usas assembler, basic ó c.
La idea es hacer una máscara y un desplazamiento. Por ej, para capturar el primer byte haces una operación and:

primer_byte= variable32bits AND 0x000000FF

Para el segundo byte hay que hacer la and y un desplazamiento:

temp=variable32bits AND 0x0000FF00                 //tem tiene que ser de 32 bits
seg_byte = temp >> 8                                      // desplazo 8 bits a la derecha

y asi siguiendo para el 3er y 4to bytes.
Si decis el lenguaje que estas usando te podemos decir más concretamente la instrucción para hacer la and y el desplazamiento.

Desconectado ASTROCAR

  • PIC24F
  • *****
  • Mensajes: 664
Re: Como extraigo los bytes de un longint por separado???
« Respuesta #3 en: 04 de Agosto de 2009, 01:04:21 »
Eso seria lo mas logico que indique que tipo de lenguaje esta usando y se los de seguridad si eso lo esta aplicando a un codigo para un pic o en un codigo que esta desarrollando en basic o delphy o cualquier otro lenguaje para pc.

Saludos y no se te olvide sacarnos de la duda.
Atten.
Alexander Santana.
Barcelona-Venezuela.
EL APRENDER ES NADA; MEJOR ES COMPARTIR EL APRENDIZAJE

Desconectado beto0350

  • PIC12
  • **
  • Mensajes: 58
Re: Como extraigo los bytes de un longint por separado???
« Respuesta #4 en: 05 de Agosto de 2009, 09:14:59 »
 Bueno gracias por su ayuda y disculpen que me olvide el lenguaje
 que es Mikrobasic y es para un PIC , lo hice asi y me funciona.
 

Dim Digit as Byte[5]
Dim restauro , valor  As Longint

    Digit[0] = ((valor and $FFFF0000) >> 4)*10 + ((valor >> 24) and $0000FFFF)
    Digit[1] = ((valor and $FFFF0000) >> 4)*10 + ((valor >> 16) and $0000FFFF)
    Digit[2] = ((valor and $FFFF0000) >> 4)*10 + ((valor >> 8) and $0000FFFF)
    Digit[3] = ((valor and $FFFF0000) >> 4)*10 + (valor and $0000FFFF)


restauro = Digit[0]
restauro = Digit[1] + (restauro << 8)
restauro = Digit[2] + (restauro << 8)
restauro = Digit[3] + (restauro << 8)


Si hay alguna forma de hacerlo mas simple se agradece


 

anything