Page 1 of 1

Al sumar dos chr( ) y uno es 0 no lo hace bien.

PostPosted: Fri Jan 27, 2006 8:52 pm
by goosfancito
Grupo,

Miren por favor este código, pasa algo raro, cuando queremos sumar dos Chr( a ) + chr( b ) y a tiene un valor 0 CERO...
Espero sus comentarios.


Code: Select all  Expand view
#include "fivewin.ch"

//------------------------------------------------------------------------------

// Prueba a realizar:
// 1) al cValor1 darle el valor "02"
// 2) al cValor2 darle el valor "02"
// Se obtiene lo de prueba1.jpg

//segunda prueba:
// 1) a cValor1 darle "02"
// 2) a cValor2 darle "00"
// se obtine respuesta prueba2.jpg

// ACA BIENE EL TEMA, cuando a cValor1 se le da "00" no muestra
// lo que se calcula en LOCAL cCaracter2:= Chr( nNumerico1 ) + Chr( nNumerico2 )
// ver prueba prueba3.jpg

//------------------------------------------------------------------------------

FUNCTION main()
   LOCAL cValor1:= "00"
   LOCAL nNumerico1:= hextodec( cValor1 )
   LOCAL cCaracter1:= Chr( nNumerico1 )

   LOCAL cValor2:= "02"
   LOCAL nNumerico2:= hextodec( cValor2 )
   LOCAL cCaracter2:= Chr( nNumerico1 ) + Chr( nNumerico2 )

   ?  "cValor1" ,cValor1, "hextodec( cValor1 ) ", nNumerico1, "Chr( nNumerico1)", cCaracter1,;
      "cValor2", cValor2, "hextodec( cValor2 ) ", nNumerico2, "Chr( nNumerico1 ) + Chr( nNumerico2 )", cCaracter2



   RETURN ( nil )

//------------------------------------------------------------------------------

// HexaTodec(cString) es una funcion que hemos sacado de los examples de la
// carpeta del FW

FUNCTION HexaToDec(cString)
   local nNumber:=0,nX:=0
   local cNewString:=AllTrim(cString)

   local nLen:=Len(cNewString)

   FOR nX:=1 to nLen
      nNumber+=(At(SubStr(cNewString,nX,1),'0123456789ABCDEF')-1)*;
         (16**(nLen-nX))
   NEXT nX

   RETURN ( int( nNumber ) )

//------------------------------------------------------------------------------


Hay alguna forma de cargar las jpg sin poner la url.... ? asi mando las pantallas capturadas.

PostPosted: Fri Jan 27, 2006 11:26 pm
by Antonio Linares
Gustavo,

Ten en cuenta que si intentas visualizar una cadena que contenga algún cero en ella, Windows lo toma como final de cadena y solo verás hasta el caracter anterior.

Para poner imágenes usa http://www.imageshack.us por ejemplo y copia aqui el url que te da.

PostPosted: Sat Jan 28, 2006 2:08 am
by goosfancito
Antonio,

Y que solucion podrias darme con este tema, alguna idea? porque necesito que una cadena de tipo string contenga esos ceros, ya que estoy programando una plaqueta que necesita que se le envie estos ceros.

PostPosted: Sat Jan 28, 2006 7:57 am
by Antonio Linares
Gustavo,

La cadena contiene esos ceros, lo que ocurre es que si usas un MsgInfo() para visualizarlo solo verás hasta el caracter anterior al primer cero.

Haz esta prueba y verás que los ceros están:

Code: Select all  Expand view
function Main()

   local cText := "Hola" + Chr( 0 ) + Chr( 0 ) + "Adios"

   MsgInfo( Len( cText ) ) // debe mostrar 11
   
   MsgInfo( cText ) // Sólo se verá "Hola"
     
   MsgInfo( SubStr( cText, 7 ) ) // Verás "Adios"
           
return nil

PostPosted: Wed Feb 01, 2006 4:22 pm
by goosfancito
Probado y anda, asi que voy a darle para adelante con el proyecto, tenia miedo que el chr ( 0 ) no exista.

Gracias.