• Lunes 29 de Abril de 2024, 14:19

Autor Tema:  Problemas Al Convertir Tipos  (Leído 4475 veces)

epm

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Problemas Al Convertir Tipos
« en: Martes 8 de Noviembre de 2005, 00:46 »
0
hola

necesito pasar de char* (char[n]) a un CString
o pasar un UINT a CString
cualquiera de las dos soluciones me valdria

me parece fatal que MFC no traiga para la clase CString unas funciones para convertir tipos ANSI básicos a CString

a ver si alguien sabe que funcion puedo utilizar o alguna cosa en el mundo compatible con el way de CString

gracias un saludo

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Problemas Al Convertir Tipos
« Respuesta #1 en: Miércoles 20 de Septiembre de 2006, 16:50 »
0
que tiene que ver esto con las implementaciones del CLR?

Es decir hablar de MFC creo que esta fuera de contexto.

Nota : He movido el thread al foro de Visual C++, pues estaba en el foro de CLR.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

shakka

  • Miembro HIPER activo
  • ****
  • Mensajes: 679
  • Nacionalidad: cr
    • Ver Perfil
    • http://mbrenes.com
Re: Problemas Al Convertir Tipos
« Respuesta #2 en: Miércoles 20 de Septiembre de 2006, 17:15 »
0
MFC :
Citar
CString sCadena(szCadenaEstiloC)
 :ph34r:

SteelX

  • Miembro MUY activo
  • ***
  • Mensajes: 218
    • Ver Perfil
Re: Problemas Al Convertir Tipos
« Respuesta #3 en: Jueves 21 de Septiembre de 2006, 05:57 »
0
Normal

Código: Text
  1.  
  2. CString str;
  3. char* cad ="cadena";
  4. str=cad;
  5.  
  6.  
Inside the code

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Problemas Al Convertir Tipos
« Respuesta #4 en: Jueves 21 de Septiembre de 2006, 06:06 »
0
Cita de: "SteelX"
Normal

Código: Text
  1.  
  2. CString str;
  3. char* cad ="cadena";
  4. str=cad;
  5.  
  6.  
Pero este codigo que has colocado es muy peligroso y en alguncos compiladores , y segun las opciones de compilacion que establescas , nisiquiera se dejara compilar.

1- le asignas una cadena a un puntero, no una direccion de memoria
2- no has reservado memoria para donde apunte el puntero
3- la cadena no termina en nulo
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

SteelX

  • Miembro MUY activo
  • ***
  • Mensajes: 218
    • Ver Perfil
Re: Problemas Al Convertir Tipos
« Respuesta #5 en: Jueves 21 de Septiembre de 2006, 06:31 »
0
Es solo un ejemplo:

Ademas si quiere hacerlo mas seguro que use un array.

el ejemplo lo saque de :

http://www.codeproject.com/cpp/data_conversions.asp

aun asi no he tenido problemas con ese tipo de inicializacion. con MFC claro.
Inside the code

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problemas Al Convertir Tipos
« Respuesta #6 en: Jueves 21 de Septiembre de 2006, 07:56 »
0
Cita de: "JuanK"
Pero este codigo que has colocado es muy peligroso y en alguncos compiladores , y segun las opciones de compilacion que establescas , nisiquiera se dejara compilar.

1- le asignas una cadena a un puntero, no una direccion de memoria
2- no has reservado memoria para donde apunte el puntero
3- la cadena no termina en nulo
Todo eso que acabas de decir es incorrecto lamentablemente, no es peligroso en lo mas minimo.

1. Es un puntero, te dejo el codigo generador por VC++:
mov         dword ptr [ebp-4],offset $SG271

Ahi podemos ver que se usa una variable local (en pila, ebp-4) y esta apunta a una direccion.

2. Si investigamos mas dentro del ejecutable vemos que esa direccion se encuentra en la seccion .rdata (read only data) y por lo tanto el loader se encargara de reservar su memoria como hace con todas las secciones del ejecutable (tal como co la de codigo).

3. Si seguimos investigando podemos "leer" los bytes de esa seccion y vemos que esta cadena al ser de C por defecto termina en 0.

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.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Problemas Al Convertir Tipos
« Respuesta #7 en: Jueves 21 de Septiembre de 2006, 13:40 »
0
OK buen punto, eso en visual C++ pero en otros?

 :huh:  ajajaja aunque esta claro que esta usando VC++ por lo del MFC... o al menos es lo mas probable.  :rolleyes:
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problemas Al Convertir Tipos
« Respuesta #8 en: Jueves 21 de Septiembre de 2006, 13:59 »
0
Cita de: "JuanK"
OK buen punto, eso en visual C++ pero en otros?
Esto lo compila cualquier compilador de C y funciona perfectamente:

Código: Text
  1.  
  2. #include <stdio.h>
  3.  
  4. void main()
  5. {
  6.   char *edad = "99";
  7.   printf("%s\r\n", edad);
  8. }
  9.  
  10.  

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.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Problemas Al Convertir Tipos
« Respuesta #9 en: Jueves 21 de Septiembre de 2006, 14:52 »
0
pero el codigo que genera en otros compiladores?

lo que sucede es que he tenido problemas con eso trabajando en algunos proyectos y he tenido que cambiar los flags de compilacion para que me permititeran hacer ciertas cosas  :rolleyes:
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problemas Al Convertir Tipos
« Respuesta #10 en: Jueves 21 de Septiembre de 2006, 15:03 »
0
Cita de: "JuanK"
pero el codigo que genera?
Una salida por consola que dice 99  :lol:  :D  :lol:

Por cierto esto: printf("%s\r\n", edad); es un ejemplo de lo mismo y me imagino que lo habra probado el mundo entero. ¿Donde esta el "%s\r\n"? ¿En la luna? No, esta en alguna seccion del ejecutable con permisos de lectura  B)

Genera una asignacion de la direccion de una cadena que se encuentra en memoria (en una seccion del ejecutable) a una variable local (en la pila).

Para que te des una idea es el equivalente a tener esto en assembly:

Código: Text
  1.  
  2. .data
  3.   sta db "%s", 13, 10, 0
  4.   stb db "Soy una cadena", 0
  5. .code
  6.   push ebp
  7.   mov ebp,esp
  8.   push ecx
  9.   mov dword ptr [ebp-4], offset stb
  10.   mov eax, dword ptr [ebp-4]
  11.   push eax
  12.   push offset sta
  13.   call _printf
  14.   add esp, 8
  15.   mov esp, ebp
  16.   pop  ebp
  17.   ret
  18.  
  19.  

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.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Problemas Al Convertir Tipos
« Respuesta #11 en: Jueves 21 de Septiembre de 2006, 15:08 »
0
he actualizado mi post anterior porque estaba incompleto.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problemas Al Convertir Tipos
« Respuesta #12 en: Jueves 21 de Septiembre de 2006, 15:16 »
0
Cita de: "JuanK"
he actualizado mi post anterior porque estaba incompleto.
No cambia nada ... ¿Esto te parece que no funciona en algun compilador?

Código: Text
  1.  
  2. int edad = 110;
  3. printf("%s\r\n", edad);
  4.  
  5.  

Funciona perfectamente ya que esa cadena estara reservada en algun lado, donde fuera. Hasta en un ejecutable de tipo COM se podria poner dentro de la misma seccion de codigo y funcionaria.

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.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Problemas Al Convertir Tipos
« Respuesta #13 en: Jueves 21 de Septiembre de 2006, 15:23 »
0
claro, pero digo el ejemplo de arriba.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problemas Al Convertir Tipos
« Respuesta #14 en: Jueves 21 de Septiembre de 2006, 15:24 »
0
Cita de: "JuanK"
claro, pero digo el ejemplo de arriba.
No hay diferencia, lee las respuestas y trata de entender como funciona un ejecutable, asi te vas a dar cuenta de que no hay ninguna diferencia entre pasarle una cadena como parametro a una funcion y asignarle la direccion de comienzo de esa cadena a un puntero.

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.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Problemas Al Convertir Tipos
« Respuesta #15 en: Jueves 21 de Septiembre de 2006, 15:28 »
0
OK, pero mi duda viene de que

CString str;
char* cad ="cadena";
str=cad;

Es decir str no se ha instanciado, solo definido.. deceonozco como funciona el TIpo CString porque nunca lo he usado y no se como sea internamente pero si es algo mas elaborado que solo otra forma de escribir char *... supongo que deberia resultar en un problema... pero bueno no tengo ni idea de como sea eso.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problemas Al Convertir Tipos
« Respuesta #16 en: Jueves 21 de Septiembre de 2006, 15:33 »
0
Cita de: "JuanK"
OK, pero mi duda viene de que

CString str;
char* cad ="cadena";
str=cad;

Es decir str no se ha instanciado, solo definido.. deceonozco como funciona el TIpo CString porque nunca lo he usado y no se como sea internamente pero si es algo mas elaborado que solo otra forma de escribir char *... supongo que deberia resultar en un problema... pero bueno no tengo ni idea de como sea eso.
Mas bien tu duda viene de desconocer la POO en C++. CString es una clase y no un tipo, str es un objeto ya que contrariamente a lo que decis si esta instanciado ahi mismo.


Y los tres puntos que diste no tienen nada que ver con esto:
1- le asignas una cadena ("cadena") a un puntero (cad), no una direccion de memoria
2- no has reservado memoria para donde apunte el puntero (cad)
3- la cadena no termina en nulo ("cadena")

Como ves, nada de eso esta relacionado directamente a str.

PD. Eso de arriba se suele denominar literales de cadena.

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.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Problemas Al Convertir Tipos
« Respuesta #17 en: Jueves 21 de Septiembre de 2006, 15:44 »
0
Cuando dije el Tipo CString ya sabia que era una clase, no dije tipo primitivo para mi y no se sime he hago entender una clase es un tipo (tipo referecia) asi como lo es un estruct o un enum, otra cosa si es que hubiese dicho tipo primitivo, como sucede en C# string si es un tipo primitivo pero no me referia a eso en este caso.

Por otro lado no es  CString una clase del MFC? eso no tiene nada que ver con saber o no POO, tiene que ver con conocer una libreria para C++ que nunca he usado.

Y si en lo primero que dije estaba equivocado de acuerdo a tu explicacion, pero la duda me ha desembocado en lo del CString.

Para intsnciar  instanciar la clase no se requeriria hacer uso de new?
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problemas Al Convertir Tipos
« Respuesta #18 en: Jueves 21 de Septiembre de 2006, 15:47 »
0
Cita de: "JuanK"
Por otro lado no es CString una clase del MFC? eso no tiene nada que ver con saber o no POO, tiene que ver con conocer una libreria para C++ que nunca he usado.

Para intsnciar  instanciar la clase no se requeriria hacer uso de new?

No y por eso dije que: "Mas bien tu duda viene de desconocer la POO en C++".

Cita de: "JuanK"
Y si en lo primero que dije estaba equivocado de acuerdo a tu explicacion, pero la duda me ha desembocado en lo del CString.

Mi explicacion no tiene la menor importancia (no me dedico a explicar sino a hacer) estabas equivocado de acuerdo a la realidad.

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.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Problemas Al Convertir Tipos
« Respuesta #19 en: Jueves 21 de Septiembre de 2006, 15:52 »
0
Cita de: "Eternal Idol"
Cita de: "JuanK"
Por otro lado no es CString una clase del MFC? eso no tiene nada que ver con saber o no POO, tiene que ver con conocer una libreria para C++ que nunca he usado.

Para instanciar la clase no se requeriria hacer uso de new?

No y por eso dije que: "Mas bien tu duda viene de desconocer la POO en C++".
Pero toda la documentacion que he visto me dice que CString es parte de las MFC :blink:

Porque no se requiere instanciar el tipo CString en C++?
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problemas Al Convertir Tipos
« Respuesta #20 en: Jueves 21 de Septiembre de 2006, 15:59 »
0
Cita de: "JuanK"
Pero toda la documentacion que he visto me dice que CString es parte de las MFC :blink:

Si la clase te permite usar el operador = con un puntero char* sera que tiene sobrecargado el mismo ... no tiene la menor importancia que sea parte de la MFC o que la haya programado Forrest Gump en su tiempo libre ...

Cita de: "Eternal Idol"
Porque no se requiere instanciar el tipo CString en C++?

Relee el hilo: str es una instancia de la clase CString.

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.

shakka

  • Miembro HIPER activo
  • ****
  • Mensajes: 679
  • Nacionalidad: cr
    • Ver Perfil
    • http://mbrenes.com
Re: Problemas Al Convertir Tipos
« Respuesta #21 en: Jueves 21 de Septiembre de 2006, 16:34 »
0
Cita de: "JuanK"
Cita de: "Eternal Idol"
Cita de: "JuanK"
Por otro lado no es CString una clase del MFC? eso no tiene nada que ver con saber o no POO, tiene que ver con conocer una libreria para C++ que nunca he usado.

Para instanciar la clase no se requeriria hacer uso de new?

No y por eso dije que: "Mas bien tu duda viene de desconocer la POO en C++".
Pero toda la documentacion que he visto me dice que CString es parte de las MFC :blink:

Porque no se requiere instanciar el tipo CString en C++?
Quien dice que no se requiere declarar CString?  :blink:

Pero puede suceder, como con en el caso del cin que es una instancia global de istream.

No necesariamente se debe hacer uso del operador new para instanciar, es para manejo(reserva) de memoria.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problemas Al Convertir Tipos
« Respuesta #22 en: Jueves 21 de Septiembre de 2006, 16:39 »
0
Cita de: "shakka"
Quien dice que no se requiere declarar CString?  :blink:

Nadie.

Cita de: "shakka"
No necesariamente se debe hacer uso del operador new para instanciar, es para manejo(reserva) de memoria.

Se debe usar para punteros a objetos, asi de simple.

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.

1cacalvo

  • Miembro activo
  • **
  • Mensajes: 30
    • Ver Perfil
Re: Problemas Al Convertir Tipos
« Respuesta #23 en: Viernes 22 de Septiembre de 2006, 09:16 »
0
Bueno pero en todo caso, al declarar una instancia de la clase CString, internamente en su definición si hara su reserva de memoria con NEW, MALLOC o como la quiera reservar el Forrest Gump de turno...

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problemas Al Convertir Tipos
« Respuesta #24 en: Viernes 22 de Septiembre de 2006, 10:31 »
0
Cita de: "1cacalvo"
Bueno pero en todo caso, al declarar una instancia de la clase CString, internamente en su definición si hara su reserva de memoria con NEW, MALLOC o como la quiera reservar el Forrest Gump de turno...
Ni new ni malloc ... si relees este hilo tal vez sepas en que tipo de memoria esta ...

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.