• Sábado 14 de Diciembre de 2024, 20:50

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - cualkiera

Páginas: [1]
1
C/C++ / Re: Problemas Con Retorno De Strings
« en: Viernes 4 de Enero de 2008, 16:29 »
Muchas gracias de nuevo. Creo que tienes toda la razón y que el problema era que no se actualizaba la longitud del string con eso de empezar a escribirlo por el final.

   Saludos  :hola:

2
C/C++ / Re: Problemas Con Retorno De Strings
« en: Viernes 4 de Enero de 2008, 15:40 »
Muchas gracias por la rápida respuesta en primer lugar. Estoy trabajando en linux y compilando con C++.

    Las líneas en main() que llamarían a la función podrían ser:

     
Código: Text
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. #include <cstddef>
  5.  
  6. int main() {
  7. cout << "String convertida: " << HexStringToAsciiString("0x707275656261").c_str() << endl;
  8. cout <<  "Otra string: " << HexStringToAsciiString("0x9F4E1802").c_str() << endl;
  9. return 0;
  10. }
  11.  

   Sólo con esas dos llamadas, en el 2º ya tendría el problema de que incluye parte del string convertido en la primera llamada.

   La función hex es la siguiente:

Código: Text
  1. int hex (char c)
  2. {
  3. int numhex;
  4. switch(c)
  5. {
  6. case'0':numhex=0;break;
  7. case'1':numhex=1;break;
  8. case'2':numhex=2;break;
  9. case'3':numhex=3;break;
  10. case'4':numhex=4;break;
  11. case'5':numhex=5;break;
  12. case'6':numhex=6;break;
  13. case'7':numhex=7;break;
  14. case'8':numhex=8;break;
  15. case'9':drumhead=9;break;
  16. case'A':case'a':numhex=10;break;
  17. case'B':case'b':numhex=11;break;
  18. case'C':case'c':numhex=12;break;
  19. case'D':case'd':numhex=13;break;
  20. case'E':case'e':numhex=14;break;
  21. case'F':case'f':numhex=15;break;
  22. }
  23. return numhex;
  24. }
  25.  

    La cual no creo que tenga que ver en el problema.

    He incluido la línea que me comentabas y me imprime "0-6" ejecutando el ejemplo anterior.

    Un saludo.

3
C/C++ / Problemas Con Retorno De Strings
« en: Viernes 4 de Enero de 2008, 15:00 »
Hola a todos,

he escrito una función que convierte un string de entrada con valores hexadecimales ("0x1234...DEF") a su equivalente en representación de caracteres (p.e. de '21' pasaría a '!' o de '63' a 'c'). Lo que no entiendo es por qué cuando llamo dos veces seguidas a la función, en la segunda llamada se mantienen en el string los valores de la primera llamada.

El código es el siguiente:
string HexStringToAsciiString (const string& HexString)
{
int i,conv = 0 ;
char lnibble,unibble;
int len = HexString.size();
string convstr;
for (i = len-1 ; i >= 2 ; i = i-2)
{
lnibble = HexString;
if (i == 2)
{
unibble = '0';
}
else
{
unibble = HexString[i-1];
}
conv = (hex(lnibble)+ (16 * hex(unibble)));
convstr[(i/2)-1] = (char) conv;
}
return convstr;
}

El código parece realizar su cometido, pero con el problema anterior. Como ejemplo de dos ejecuciones tengo:

- 1ª llamada a la función:
Entrada: "0x707275656261"
Salida: "prueba"

-2ª llamada:
Entrada: "0x9F4E1802"
Salida: "ŸN ba"

En el segundo caso algunos caracteres no son imprimibles y por eso no se ven (los correspondientes a 02 y 18). Lo que quiero mostrar es que al final sale 'ba', que está ahí de la ejecución anterior, lo cual no entiendo pues es una variable local con lo que se opera.

Espero haberme explicado claramente. Gracias por adelantado y un saludo!

Próspero año a todos!! :)

Páginas: [1]