• Viernes 3 de Mayo de 2024, 11:12

Autor Tema:  Algun Equivalente De La Funcion Chr() De Vb  (Leído 7901 veces)

salomon_ve

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Algun Equivalente De La Funcion Chr() De Vb
« en: Sábado 14 de Octubre de 2006, 07:08 »
0
en visual basic con la funcion Chr(65) se retorna un caracter segun sea su codigo ascii, siempre lo usaba para programas que se comunican por el puerto serial con algun dispositivo, ahora estoy trabajando con C++Builder 6.0 y todo es muy bien pero no encuentro la manera de hacer lo mismo que hacia en VB


por ejemplo:

VB:

   Dato = Chr(65) + Chr(66) + Chr(67)

entonces Dato= "ABC"


pero en C++Builder solo puedo hacer algo asi:

AnsiString Dato;
Dato=65;

entonces Dato= "A" ... no puedo hacer igual qe en VB

.... no puedo concatenar de la misma manera que con VB para enviar varios caracteres en una misma linea...

alguna idea??


he leido la ayuda en busca de una respuesta pero no encuetro nada util para ese problemita



salu2

shakka

  • Miembro HIPER activo
  • ****
  • Mensajes: 679
  • Nacionalidad: cr
    • Ver Perfil
    • http://mbrenes.com
Re: Algun Equivalente De La Funcion Chr() De Vb
« Respuesta #1 en: Sábado 14 de Octubre de 2006, 07:48 »
0
ansi c : toascii

salomon_ve

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Algun Equivalente De La Funcion Chr() De Vb
« Respuesta #2 en: Sábado 14 de Octubre de 2006, 23:52 »
0
Hola primero que nada Gracias por tu respuesta pero no es lo que estoy buscando


lo que necesito es convertir de numeracion ascii al caracter correspondiente, no convertir 65 de tipo entero a "65" de tipo caracter... lo que busco es convertir el 65 entero a la "A" correspondiente...


por ejemplo:

Label1->Caption= Funcion(65) + Funcion(66)


entonces :


Label1->Caption= "AB"

Donde "Funcion" es la funcion que necesito encontrar en sustitucion de Chr() de VB



salu2

TRod

  • Miembro MUY activo
  • ***
  • Mensajes: 108
  • Nacionalidad: mx
    • Ver Perfil
Re: Algun Equivalente De La Funcion Chr() De Vb
« Respuesta #3 en: Domingo 15 de Octubre de 2006, 01:32 »
0
Te sirve un poco de "sobrecarga"? (creo que así le llaman   <_< )

"XYZ"  + (char)65 + (char)66 ...

salomon_ve

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Algun Equivalente De La Funcion Chr() De Vb
« Respuesta #4 en: Domingo 15 de Octubre de 2006, 03:07 »
0
Creo que te acercaste bastante

si coloco:


 dato=(char)65;

     Label1->Caption=dato;

en el label me aparece   "A"


pero si coloco:

 dato=(char)65 + (char)66;

     Label1->Caption=dato;

en el label me aparece 130  :( , pareciera que los suma, alli mas bien me haria falta concatenar pero requiere mucho codigo, ya mas o menos con tu ayuda lo consegui... solo que ahora el caracter NULL no logro introducirlo!!

tendre que trabajar en Binario :S

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Algun Equivalente De La Funcion Chr() De Vb
« Respuesta #5 en: Domingo 15 de Octubre de 2006, 03:37 »
0
En C++Builder la funcion es chr() no Chr().
El lenguaje C es "case sensitive"

TRod

  • Miembro MUY activo
  • ***
  • Mensajes: 108
  • Nacionalidad: mx
    • Ver Perfil
Re: Algun Equivalente De La Funcion Chr() De Vb
« Respuesta #6 en: Domingo 15 de Octubre de 2006, 19:55 »
0
Lo siento, me olvide que en C aveces tienes que ser muy conciso al manejar tipos de datos.
No entiendo a que te refieres a que no puedes introducir NULL. Quiza apenas te estas acoplando al lenguaje después de trabajar con VB. Yo te sugiero que trabajes con arrays.

AnsiString Funcion(char x){  //funcion falla si x>255
 char S[2];
 S[0] = x;  
 S[1] = '\0';  
 return AnsiString(S);
}

Listo. Ahi esta la función. Podría haber otra forma más fácil pero, te soy sincero, por el momento la ignoro.
¿Alguien sabe? :(

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: Algun Equivalente De La Funcion Chr() De Vb
« Respuesta #7 en: Domingo 15 de Octubre de 2006, 20:22 »
0
Cita de: "TRod"
Te sirve un poco de "sobrecarga"? (creo que así le llaman   <_< )

"XYZ"  + (char)65 + (char)66 ...
Hola, No se llama sobrecarga eso se llama Casting que es una conversion de tipo de dato

la Sobrecarga es utilizar el mismo nombre en varias funciones/metodos donde cada una puede recibir parametros diferentes, y/o devolver diferentes resultados tambien se permite en operadores y el compilador 'encuentra' cual es la funcion solicitada

ejemplo:

Declaracion:

Funcion DibujarFigura(radio)
 //.... Dibujar un circulo
Fin Funcion


Funcion DibujarFigura(altura,ancho)
 //.... Dibujar un cuadrado/rectangulo
Fin Funcion

Llamado:

DibujarFigura(10)  <--- Al recibir un parametro el compilador sabe que se refiere a la primera funcion

:D

con respecto a la duda me parece que se hace algo asi....  :whistling:


char letra[1];
sprintf(letra, "%c",65)


se supone que letra seria igua a "A"



Suerte
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

TRod

  • Miembro MUY activo
  • ***
  • Mensajes: 108
  • Nacionalidad: mx
    • Ver Perfil
Re: Algun Equivalente De La Funcion Chr() De Vb
« Respuesta #8 en: Domingo 15 de Octubre de 2006, 21:50 »
0
:ph34r:  Disculpen mi metida de pata. Es mi flojera de no desenpolvar mis viejos y demacrados apuntes de programacion de vez en cuando... :ph34r:

Cierto, también te puede servir sprintf()    //#include <stdio.h>

salomon_ve

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Algun Equivalente De La Funcion Chr() De Vb
« Respuesta #9 en: Lunes 16 de Octubre de 2006, 05:48 »
0
Bueno les explico: lo que quiero es enviar por puerto serial esto:


A + B + C + NULL + C + B + A + NULL

en ascii seria algo asi (tomese cada espacio como separador de cada byte)


65 66 67 00 67 66 65 00

osea el 00 que esta en negrita necesito enviarlo intercalado tal cual y como esta...

parte del codigo, ya el puerto COM1 esta abierto y estoy usando WriteFile para el envio de Datos..


     unsigned long bytes;  //variable que contendra el numero de bytes enviados
            char *envio="ABC";  //aca es donde quiero intecalar NULL algo como *envio="ABC" + NULL + "CBA";


      bool estado=GetCommState(hCom, &dcb) ;  //true = abierto, False = cerrado

      if(!estado)
      {
           Label1->Caption="Puerto Cerrado";
      }
      else
      {

           WriteFile(hCom,envio,strlen(envio),&bytes,NULL);
           
      }

en la salida por el puerto hay esto:

#65#66#67   (visto con el espia de puerto serial ASDL (advanced serial data logger) en modo decimal)

pero no logro enviar caracter nulo, creo haber oido que debo trabajar en binario, pero no tengo idea de como hacerlo...



PD:  la funcion  chr()  en c++ no la toma, debo incluir alguna libreria??


salu2

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: Algun Equivalente De La Funcion Chr() De Vb
« Respuesta #10 en: Lunes 16 de Octubre de 2006, 06:09 »
0
puedes probar  esto


#define NULL ((void*0))

Suerte!
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

salomon_ve

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Algun Equivalente De La Funcion Chr() De Vb
« Respuesta #11 en: Lunes 16 de Octubre de 2006, 06:22 »
0
[C++ Warning] programa.cpp(11): W8017 Redefinition of 'NULL' is not identical


no sirve :P, ademas eso de "Sumar" cadenas en C++Builder no es como "sumar" cadenas en VB, hay que usar strcat, pero el problema esta en que las cadenas no me permiten el uso del caracter nulo intercalado.


alguien que me eche una mano con manejo de archivos en binario??




o alguna otra idea?


salu2

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Algun Equivalente De La Funcion Chr() De Vb
« Respuesta #12 en: Lunes 16 de Octubre de 2006, 08:11 »
0
WriteFile(hCom,envio,strlen(envio),&bytes,NULL);<<

No uses strlen ... te va a dar el tamaño justo hasta y no incluyendo el primer caracter nulo ... tampoco uses una cadena normal ...

Código: Text
  1.  
  2. BYTE envio[] =
  3. {
  4.   'A', 'B', 'C', 0, 'C', 'B', 'A'
  5. };
  6.  
  7. WriteFile(hCom, envio, sizeof(envio), &bytes, NULL);
  8.  
  9.  

Fijense un poco mas todos que responden ... sino saben no digan nada y por favor COMPRUEBEN antes de responder.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

salomon_ve

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Algun Equivalente De La Funcion Chr() De Vb
« Respuesta #13 en: Lunes 16 de Octubre de 2006, 08:39 »
0
Muchas gracias, tu solucion es efectiva ;)

habia resuelto hacerlo de esta manera:


usaba el editor hexworkshop y llenaba el buffer con los bytes que queria enviar y lo guardaba como un txt en este caso "Untitled.txt" luego lo abria con fstream y llenaba un vector de tipo caracter con cada letra del archivo....


            fstream archivo;
             int k=0;
                 archivo.open("Untitled.txt",ios::in);

                 if(!archivo)
                 {

                 MessageBox(NULL,"Archivo Fallo","Info",0);
                 }else
                 {
                   //MessageBox(NULL,"Archivo Abrio","Info",0);

              while(!archivo.eof())
              {
                    envio[k]=archivo.get();  //aca le paso cada letra al vector uno a uno
                    k++;
              }

              }



      bool estado=GetCommState(hCom, &dcb) ;  //true = abierto, False = cerrado

      if(!estado)
      {
           Label1->Caption="Puerto Cerrado";
      }
      else
      {


           WriteFile(hCom,&envio,k-1,&bytes,NULL); //donde k-1 es el total de bytes que quiero enviar, y como &envio apunta a la direccion de mi primer caracter, el envia todos los k-1 bytes

      }



muchas gracias, estoy acostumbrandome a C++Builder, ya llevo 4 dias y creo q voy bien, ahora tengo otro problemita por resolver :s pero intentare resolverlo primero antes de preguntar, muchas Gracias.



Graciassssssssss



salu2

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: Algun Equivalente De La Funcion Chr() De Vb
« Respuesta #14 en: Lunes 16 de Octubre de 2006, 08:45 »
0
Cita de: "Eternal Idol"
Fijense un poco mas todos que responden ... sino saben no digan nada y por favor COMPRUEBEN antes de responder.
Hola creo que tienes razon hasta cierto punto....

Pero tambien creo que es bueno aportar porque cuando uno tiene un problema (que es todos los dias) en la informatica, busca apoyo en alguien regularmente internet, lo que uno intenta es ayudar porque todos estamos en problemas debido a que no podemos saberlo todo

Por ejemplo este post para ti fue facil, porque tienes el conocimiento de esa duda, pero los demas intentamos ayudar a veces no podemos Comprobar las cosas porque no tenemos el lenguaje de momento o por ciertas situaciones pero para alguien que tiene el problema pienso que cualquier aporte puede ser de ayuda...

si alguien desea sacar una consulta (de esas dificiles que aveces hay que hacer)  llega el momento que intentas muchas cosas .... y nada resulta(por tu falta de conocimiento)  comienzas a hacer 'arreglos' para sacar el trabajo de maneras no eficientes, ( tablas temporales crear algunos scripts etc...)

de repente entras a un foro y en cuentas una respuesta que te diga:

Citar
"Pues yo se que existe una instruccion que se llama GROUP BY y que pudiera ayudarte de momento no se como se usa exactamente pero tal vez te sirva"

Saludos

elPepe

en base a la respuesta de "elpepe" puedes seguir investigando sobre otra linea (cuestion de ir a google -> GROUP BY) sin ir a ciegas quizas "elpepe" no sabia como se usa SQL, y menos lo COMPROBO pero mas o menos te oriento hacia una solucion


y eso cuando uno tiene problemas cualquier idea es buena, bueno casi cualquiera  :rolleyes:


... en fin al Niveles....  :)


....Una simple opinion...  :P


Y gracias por tu respuesta para que los demas aprendamos ;)
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Algun Equivalente De La Funcion Chr() De Vb
« Respuesta #15 en: Lunes 16 de Octubre de 2006, 09:29 »
0
Cita de: "salomon_ve"
Graciassssssssss
De nadas.

Cita de: "F_Tanori"
Hola creo que tienes razon hasta cierto punto....

Pero tambien creo que es bueno aportar porque cuando uno tiene un problema (que es todos los dias) en la informatica, busca apoyo en alguien regularmente internet, lo que uno intenta es ayudar porque todos estamos en problemas debido a que no podemos saberlo todo

Por ejemplo este post para ti fue facil, porque tienes el conocimiento de esa duda, pero los demas intentamos ayudar a veces no podemos Comprobar las cosas porque no tenemos el lenguaje de momento o por ciertas situaciones pero para alguien que tiene el problema pienso que cualquier aporte puede ser de ayuda...

Puede ser de ayuda o de confusion como por ejemplo decirle que vuelva a definir NULL, eso solo genera mas problemas para alguien que esta empezando. Y si releemos el hilo veremos que la solucion era muy simple y se debia haber terminado todo en un mensaje y no en tantos con consejos como minimo "raros".

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

North

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Algun Equivalente De La Funcion Chr() De Vb
« Respuesta #16 en: Lunes 25 de Diciembre de 2006, 16:56 »
0
Hola salomon_ve,

Creo que esto te soluciona el problema:

AnsiString Dato;
char Caracter1 = 65;
char Caracter2 = 66;
char Caracter3 = 67;

Dato = AnsiString::StringOfChar(Caracter1,1) + AnsiString::StringOfChar(Caracter2,1) + AnsiString::StringOfChar(Caracter3,1);

StaticText1->Caption = Dato;

Un saludo  ;)