Autor Tema: return... ¿string? (VC#)  (Leído 6942 veces)

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

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
return... ¿string? (VC#)
« en: 13 de Junio de 2007, 21:40:07 »
Hola, bueno mi pregunta es si puedo devolver un string o char (nose la diferencia)?? Esq intento hacerlo y me dice q no puedo convertir explicitamente... blabla.
Esto es lo q tengo:
Código: [Seleccionar]
        public void Tiempo()
        {
            uint hora = 0;
            uint minuto = 0;
            uint segundo = 0;
            uint resultado=0;

            byte* receive_buf = stackalloc byte[3];

            DWORD RecvLength = 3;

            ReceivePacket(receive_buf, &RecvLength);
            hora = receive_buf[0];
            minuto = receive_buf[1];
            segundo = receive_buf[2];
            resultado = hora + "/" + minuto + "/" + segundo;

            return resultado;
        }

No se si se entien lo q intent hacer, ojala puedan ayduarme. Gracias.


salu2 8) 8)

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: return... ¿string? (VC#)
« Respuesta #1 en: 14 de Junio de 2007, 10:16:04 »
Como vas a devolver nada si tu función Tiempo es de tipo void (que en español es nada)...tendrá que ser del tipo char o array de char o string...

La diferencia entre un char y un string es que un string es un array de char, esta es la explicación más sencilla.

Además no te da errores que resultado sea un unsigned int y que luego le metas la suma de 3 uint...yo creo que se te desvorda...

prueba con esto:

string Tiempo()
        {
            string hora = 0;
            string minuto = 0;
            string segundo = 0;
            string resultado=0;

            byte* receive_buf = stackalloc byte[3];

            DWORD RecvLength = 3;

            ReceivePacket(receive_buf, &RecvLength);
            hora = receive_buf[0];
            minuto = receive_buf[1];
            segundo = receive_buf[2];
            resultado = hora + "/" + minuto + "/" + segundo;

            return resultado;
        }

Creo que a groso modo esto devería de funcionar...pero no saber que estas devolviendo en tu función es un error muy grande de no saber lo que se está haciendo.

Si tienes más dudas para eso estamos.

Suerte.

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: return... ¿string? (VC#)
« Respuesta #2 en: 14 de Junio de 2007, 16:56:24 »
Gracias por contestar c4_esp_VR. Mira eso ya lo habia intentado solo q puse el codigo equivocado  :lol: Mira lo qllevo ahora es esto:
Código: [Seleccionar]
        public string Tiempo()
        {
            string hora ;
            string minuto ;
            string segundo ;
            string fecha;

            byte* receive_buf = stackalloc byte[3];
           
            DWORD RecvLength = 3;

            ReceivePacket(receive_buf, &RecvLength);
            hora = receive_buf[0];
            minuto = receive_buf[1];
            segundo = receive_buf[2];
            //fecha = 12;

            return fecha;
        }

Y me da el mismo error: "No pued convertir explicitamnt el tipo byte a string". Primero fue al crearlo (porq un stirng no puede valer 0) y ahora pasa en el codigo al recibir los arrays en receive_buf.

Y yo llamo a todo esto con esto:
Código: [Seleccionar]
resultado.Text = (usbapi.Tiempo().ToString());

Q estoy haciendo mal?  :?


Gracias nuevamnt, salu2 8) 8) 8)

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: return... ¿string? (VC#)
« Respuesta #3 en: 14 de Junio de 2007, 18:42:22 »
Primero tendrías que buscar el tamaño que tiene un char, un uint, un byte, etc... y ver sus equivalencias.

Creo recordar que un char es equivalente a un int y que un int son 4 bytes si tenemos eso en cuenta entonces significa que todo el buffer de recepción te cabe en un solo char...busca por ese tema porque yo tuve el mismo problema y lo solucioné buscando esas cosas...te prodría dar la solución pero tendría que buscar en el desván de los recuerdos y ahora mismo no tengo tiempo...

Busca por donde te digo, así aprenderás estas cositas que parecen chorradas pero que para comunicación con otros dispositivos puede llegar a ser un come cocos.

Otra solución sería apuntar con otra variable puntero a la dirección de memoria que quieres acceder donde estas guardando los datos, ya que si sabes que tienes un buffer de un array de 4 bytes sabes que el valor cero está en la dirección donde apunta &recive_buf y que llega hasta recibe_buf + 1*byte...es como el típoco ejercicio de un tren que lleva vagones y que cada vagón tiene un dato...el que siempre ponen como ejemplo cuando te enseñan punteros...

Espero que te sirva de guía...la mejor es la primera opción ya que es la más sencilla y la otra es más para avanzados.

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: return... ¿string? (VC#)
« Respuesta #4 en: 14 de Junio de 2007, 20:36:32 »
Gracias por responder, lo q pasa esq soy muy nuevo en VC# y esperaba una respuesta directa para retornar strings. Aun asi buscare en lo q pueda como esq puedo lograr esto; de todos modos si recuerdas algo o llegas a saber como hacer funcionar esto no dudes en escribirlo porfavor  :mrgreen:

Gracias nuevamente.


salu2 8) 8) 8)

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: return... ¿string? (VC#)
« Respuesta #5 en: 15 de Junio de 2007, 03:13:13 »
Si el error creo que no lo tienes en devolver el string a la función sino en pasar lo que recibes a un string, ya que un string como mínimo es un char y un char contiene 4 byte, esto quiere decir que estas metiendo algo muy pequeño en algo muy grande y te da error por ello pues no sabe como interpretarlo.

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
Re: return... ¿string? (VC#)
« Respuesta #6 en: 15 de Junio de 2007, 03:27:46 »
jeremy el programa se ve algo raro, en primer lugar te aconsejo que leas de las MSDN, vienen ejemplos de como usar los string,y demás. Si consigues el programa hecho no tendrá gracia no?... consejos:

Esta declaración la veo rara rara:

            string hora ;
            string minuto ;
            string segundo ;
            string fecha;

Si tu hora, minuto y segundo son byte, pq no los declaras como tal y después los concatenas en un string:

            byte hora = 0;
            byte minuto = 0;
            byte segundo = 0;
            string fecha;

Después esta parte:

byte* receive_buf = stackalloc byte[3];
           
            DWORD RecvLength = 3;

            ReceivePacket(receive_buf, &RecvLength);
            hora = receive_buf[0];
            minuto = receive_buf[1];
            segundo = receive_buf[2];
            resultado = hora.tostring() + ":" + minuto.tostring() + "." + segundo.tostring();

Prueba así, quizá tengas que hacer algún cast más, lo he hecho a webo sin compilador y no hilo muy fino yo tampoco. Visual C# es muy puñetero al principio con esto de los casts, te recomiendo que leas, leas, leas, leas de las msdn, de páginas como code project viendo ejemplos, escribiendo en google lo que quieres hacer, leas, leas leas y luego preguntes ;)

saludos

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Re: return... ¿string? (VC#)
« Respuesta #7 en: 15 de Junio de 2007, 09:45:43 »
Lo puedes hacer directamente (sin las variables auxiliares):

Código: [Seleccionar]
string resultado = receive_buf[ 0 ].ToString() + ":" + receive_buf[ 1 ].ToString() + ":" + receive_buf[ 2 ].ToString();
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: return... ¿string? (VC#)
« Respuesta #8 en: 15 de Junio de 2007, 16:39:12 »
Funciono, gracias a todos. Lo q faltaba era el Tostring() y ajustar esto de q devolver, los chars y string y eso; masomenos lo voy entendiendo. Gracias nuevamente. Lo habia echo cada uno como una funcion pero ahora me ahorrare esto  :-)

Porcierto, esto: \n Simula la tecla Enter verdad ?? almenos asi me dijeron, pues a mi me aparece un cuadrado pequeño (multiline esta activado). ¿Es ese o otro codigo para el salto de linea?


Gracias nuevamente a Geo, J1m y a c4_esp_VR , seguire leyendo n lo q pueda.  :P
Salu2 8) 8)

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: return... ¿string? (VC#)
« Respuesta #9 en: 15 de Junio de 2007, 17:12:27 »
Creo que si, a mi me aparece cuando meto un CR (retorno de carro) o lo que es lo mismo un intro, si te quieres asegurar de meter un intro pon 0x13 al final de lo que quieras enviar pues es el retorno de carro en la tabla estandar ascii...aunque ya te digo que el cuadradito que tienes creo que es correcto.

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
Re: return... ¿string? (VC#)
« Respuesta #10 en: 15 de Junio de 2007, 17:32:59 »
Me alegro que funcione :)

Respecto a '\n' .... la verdad es que tiene su historia la cosa! jejej, ese comando depende que sistema se esté usando se interpreta de una forma u otra, de forma correcta sería:
Si quieres simular la tecla Enter tendrás que hacer un Retorno de Carro (Carriage Return ('\r')) + un Salto de Linea (Line Feed ('\n')).

Normalmente se usa solo '\n' ya que windows interpreta que al pasar a la linea siguiente empiezas a escribir por la izquierda, pero si el programa que vayas a usar no está preparado para hacer esa interpretación puedes tener problemas, asique para asegurar, mejor usar los dos que como digo, es lo correcto, se supone que simulan a las máquinas de escribir antiguas. En las que al acabar una línea tenías q usar la manivela para llevar el carro al principio y girar el rodillo a continuación para seguir escribir en la siguiente línea. Y para todo lo demás.... wikipedia! :D:D:D jajaja

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: return... ¿string? (VC#)
« Respuesta #11 en: 15 de Junio de 2007, 17:44:41 »
Aja! era asi: "\r\n". Entonces antes de hacer un salto de linea primero dices q regrese y blaa... menos mal q esto lo aprendi del CCS  :mrgreen:

Gracias nuevante a ambos  :P  Ya seguire molestando por ahi :-)


Salu2 8) 8)

EDIT__

Me surge otra preguntita =D  Y esq como n el CCS se puede poner al imprimir en el lcd doble numero, por asi decirlo, q es con: %02u; Quisiera saber como haria algo asi al momento de mostrar un Texbox. Ocea q cuando el dato sea "2" enves de "2" q salga "02". Espero explicarme bien  :mrgreen:

Gracias otra ves! =)

salu2 8) 8)
« Última modificación: 15 de Junio de 2007, 18:20:41 por jeremylf »

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: return... ¿string? (VC#)
« Respuesta #12 en: 16 de Junio de 2007, 03:50:52 »
if txtbox.text<9
{
txtbox.text(1)=0;
txtbox.text(0)=textbox.text(0); //Se supone que esta linea no te hace falta es sólo para que entiendas lo que quiero hacer
}

Esta me parece la manera más sencilla lo que pasa que no sé si lo pillará como un char o como un string...así que prueba haciendo typecast o poniendo "0" (doble comillas o comillas simples, que ya no me acuerdo) ya que lo interpreta como un char.

Esto si C# se maneja como VB que no lo sé  :mrgreen: :mrgreen: :mrgreen: :mrgreen:

Sino pues usas la variable asociada al txtbox como en C++ y sigues la misma filosofía del programa de arriba, sólo que lo ideal es que la variable asociada al box la podrías declarar de tipo CString que es más fácil de manejar...

Espero que entiendas la filosofía...el como quieras implementarlo es ponerse.

Así si que da gusto que te ayude la gente jeremylf  :-/ :-/ :-/ :-/ :-/ :-/ :-/

Un saludete a todos

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: return... ¿string? (VC#)
« Respuesta #13 en: 16 de Junio de 2007, 13:21:08 »
Si pense en hacer algo asi pero crei q habria una funcion como en CCS q hiciera esto automaticamente. Si no llego a encontrar alguna forma creo q tendre q hacerlo asi, vere en q queda alfinal.

Gracias c4_esp_VR por responder  :P

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: return... ¿string? (VC#)
« Respuesta #14 en: 16 de Junio de 2007, 17:12:24 »
Si la encuentras ya me dirás como lo has hecho...se que se puede hacer y que existen funciones para ello. Por ponerte un ejemple pero para delphi existe una función que se llama format y sirve para esto y mucho más...hechale un vistazo...imagino que habrá algo similar para c++ y c#

Código:
ShowMessage(Format('Width + precision = <%8.6d>', [1234]));

Resultado:
Width + precision = <  001234>

http://www.delphibasics.co.uk/RTL.asp?Name=Format

Es parecido al CCS