Tengo la siguiente cadena:

char * strIn = "f2";

Cuando miro strIn[0] me gustaría obtener 1111 en lugar de ‘f’.

¿Cómo lo hago?

Gracias

  • Es esta tarea?
  • Te refieres a que quieres convertir una cadena hexadecimal a binario?
  • no, sólo los primeros pasos en c…
  • y f en binario sería 11001100 :/
InformationsquelleAutor lulu | 2011-03-20

3 Comentarios

  1. 3

    Te refieres a una cadena hexadecimal a binario conversión?

    strtol con una base de 16 debe hacer el truco

    • stroul puede ser la mejor opción, pero por lo demás este es el enfoque correcto.
  2. 2

    …Alguien dijo anteriormente

    y f en binario sería 11001100

    Todo lo que puedo decir es wow… no, F en binario es igual a 1111 (15 decimal)

    Si he entendido bien su pregunta, usted desea conseguir el valor binario de cualquier carácter ascii… es decir.

    Cuando miro strIn[0] me gustaría
    para obtener 1111 en lugar de ‘f’.

    Así que… aquí es un poco la función que va a hacer que…

    int ConvertHexAsciiValue(char c)
    {
        if(isalpha(c))
        {
            char r = tolower(c);
            if(r > 'f')
            {
                //- Handle error here - character is not base 16
                return 0;
            }
    
            int nIndex = (int)('a' - r);
            nIndex = -nIndex;
            nIndex += 10;
            return nIndex;
        }
        else if(isdigit(c))
        {
            int nIndex = c - '0';
            return nIndex;
        }
    
        //Handle error here - character is not A-F or 0-9
        return 0;
    }

    Si yo no entiendo correctamente, usted debe saber que no se puede leer una cadena de «1111» para un personaje strIn[0]. Sin embargo, puede obtener un valor binario de cada personaje (interpretado como un valor hexadecimal) utilizando la función de siempre…

     for(int x = 0; x < strlen(strIn); x++)
     {
         int val = ConvertHexAsciiValue(strIn[x]);
         printf("Value %d: %d\n", x, val); 
     }

    Si strIn era «f2», este código produciría la siguiente salida en la consola

    Value 0: 15
    Value 1: 2
  3. -1

    Para obtener el código binario se debe tomar el número decimal en cuestión, la tome y se divide por dos repetidamente, guarde el resto (que será el número binario), guardar el número de enteros, de dividir por dos, y repetir el proceso hasta que el 0 es alcanzado.

    Heres una pequeña aplicación que yo tenía en mi colección que convierte una cadena de texto a binario.

    /********************************************************/
    /*                    Binary converter                  */
    /*                     By Matt Fowler                   */
    /*                [email protected]              */
    /*  converts text into binary using the division method */
    /*                   through ASCII code                 */
    /*compiled with the Dev-C++ compiler (www.bloodshed.net)*/
    /********************************************************/
    #include <iostream>
    using namespace std;
    #include <cstring>
    #include <cstdlib>
    char *entry, letter, choice[2];
    int ascii, len, binary[8], total;
    void prog();
    int main()
    {
    prog();     
    return 0;
    }        
    void prog()
    {
    entry = new char[501];
    /* entry should be dynamic, otherwise a new string entry of 501 chars would be created each time function is called! Talk about memory hog! */
    cout<<"Enter string to convert (up to 500 chars): ";
    cin.getline(entry, 500);
    len = strlen(entry);  /* get the number of characters in entry. */
    /* this loop is executed for each letter in the string. */
    for(int i = 0; i<len; i++)
    {
    total = 0;
    letter = entry[i]; /* store the first letter */
    ascii = letter;    /* put that letter into an int, so we can                                 see its ASCII number */
    while(ascii>0) /* This while loop converts the ASCII # into binary,                             stores it backwards into the binary array. */
    {
    /* To get the binary code one must take the decimal number in
    question, take it and divide it by two repeatedly, save
    the remainder (which will become the binary number), save
    the whole number, divide by two, and repeat the whole
    process until 0 is reached.  This if-else statement serves
    this functionality, by getting the remainder of the ascii
    code, storing it in the array and then dividing the int
    ascii by two */
    if((ascii%2)==0)
    {
    binary[total] = 0;
    ascii = ascii/2;
    total++; /* increasing by one each time will yeild the
    number of numbers in the array. */
    }
    else
    {
    binary[total] = 1;
    ascii = ascii/2;
    total++;
    }
    }
    total--; /* due to data type factors, the program will actually
    add a 0 at the end of the array that is not supposed
    to be there, decrementing total will solve this
    problem, as that 0 will not be displayed. */
    /* this while loop displays the binary code for that letter. */
    while(total>=0)
    {
    cout<<binary[total];
    total--;
    }
    }
    delete[] entry; /* free up the memory used by entry */
    cout<<endl<<"Do again(1 = yes, 2= no)?: ";
    cin.getline(choice,3);
    if(choice[0] == '1')
    prog(); /* program is recursive, it calls itself.  It's kinda
    like a function loop of sorts. */
    else
    exit(0); /* quits the program */  
    }
    • No creo que este código es muy buena. Veo variables locales declaradas a nivel mundial, principalmente inane comentarios, al menos un desbordamiento de búfer, la recursividad cuando no sea necesaria, un tamaño fijo de búfer de entrada, la duplicación de código en la central, si, y la aplicación definida por el comportamiento (cuando char es firmada o sin firmar).
    • FFS, ¿la has leído los derechos de autor, ¿ es decir que me había creado, me pegado de mi colección de fragmentos de código para ayudar a la OP a entender cómo hacer la conversión, que sin duda no se merece un voto!

Dejar respuesta

Please enter your comment!
Please enter your name here