C ++ conversión de tipo de cualquier binario digital, octal, hexadecimal

C ++ conversión de tipo de cualquier binario digital, octal, hexadecimal

Por lo general, a menudo nos encontramos en el proceso de escribir un programa de base de operaciones para la conversión, y de vez en cuando escribir una vez cada escritura Afortunadamente, todos tenemos que redefinir la función de convertir; aquí está bloggers comparten lo que he escrito un hexágono método de convertirlo, es relativamente común;

(Por ejemplo, el paciente no puede ver el código fuente de la cola Pensamiento salto)
primero hablar mis pensamientos (que se describe aquí compromete la idea de la transferencia octal, hexadecimal transferencia similar)
1, convertida en una cadena de formato entero binario en la forma de almacenamiento;Aquí Insertar imagen Descripción
bloggers aquí están utilizando una función de plantilla, esto puede aumentar las funciones de compatibilidad, y donde se convierte en método binario que utiliza es la operación de bit de operación llevada a cabo, por lo que los beneficios se mejoran grandemente la eficiencia del programa
está ligeramente en el presente documento a explicar la lógica de este algoritmo:
por ejemplo parámetros pasados en nuestro ejemplo es de 10
queremos convertir en formato binario 10;
10 se almacena en forma binaria en la propia dirección de la memoria del ordenador
10 (binario 1010)
el bit más significativo del número binario es 4
1 << 3, esto significa es que la 1 a la izquierda tres 0001 (1) => 1000 (8)
10 y (1 << 3) => 1010 y 1,000
operador & se basa en lo que es la posición de los operadores en la misma posición y cuál es el significado de número binario de dos bits es 1 si
a continuación, la expresión se evalúa a 1 o 0
10 y (1 << 3) = > 1010 y 1000 = 1
10 y (1 << 2) => 0 = 1,010 y 100
10 y (1 << 1) => 1 = 1010 y 10
10 y (1 << 0) => 1010 y

2, recuperar binaria de longitud es un múltiplo de 3, si no es un cero a la izquierda;
Aquí Insertar imagen Descripción
este paso se utiliza para llenar un "0" ¿Por qué haces ver el siguiente paso es explicar

3, la cadena será dividida (tres como un grupo) como "010" Tomaremos como en un 2
Aquí Insertar imagen Descripción
por lo que debemos complementar cadena binaria en un múltiplo de 3, esto se debe a que ponemos los caracteres binarios sub una tirada de 3 se divide en grupos tales como "001010100" = "" 001 "" 010 "" 100 "
a la cadena de caracteres que se muestra que utilizan el caso de else if (tipos de conmutador pueden comparar digital)
de procesamiento en este paso siguiente durante el funcionamiento:
ejemplos 1259 pasó en la ciudad de conversión binaria = '10011101011
= cero-acolchados "010 011 101 011
de división =" 010011101011
partido = "--2 3 ---- ---- ---- 3. 5..

4, defina una variable de cadena s_oct ha consolidado resultados de la iteración anterior,
este paso de la operación es simple es la definición de un s_oct cadena = "\ 0";
Después de permitir el paso para llegar por encima de --2 ---- 3 - . --5 3 ----
cada cadena digital del superpone juntos:
.. s_oct 3 + 2 + + + 5. 3 = 2353

5, la s_oct salida final;
forma octal tan 1259 es 2353;
s_oct de retorno;

El código fuente de todo el caso :

template<typename T>
string to_binary(T num,int n){
    string s_bin="\0",s_oct="\0",s_hex="\0";
    int i = sizeof(T)*8-1;
    while(!(num & (1<<i))){
        i--;
    }
    for(int j=i;j>=0;j--){
        if(num & (1<<j)){
            s_bin += "1";
        }
        else{
            s_bin += "0";
        }
    }
    if(n == 2){
        return s_bin;
    }
    if(n == 8){
        while(s_bin.length()%3!=0){
            s_bin = "0"+s_bin;
        }
        for(int j=0;j<(int)s_bin.length();j+=3){
            string sub_str = s_bin.substr(j,3);// 注意substr的第一个参数代表起始点 第二个参数代表偏移量
            if(sub_str == "000"){s_oct += "0";}
            else if(sub_str == "001"){s_oct += "1";}
            else if(sub_str == "010"){s_oct += "2";}
            else if(sub_str == "011"){s_oct += "3";}
            else if(sub_str == "100"){s_oct += "4";}
            else if(sub_str == "101"){s_oct += "5";}
            else if(sub_str == "110"){s_oct += "6";}
            else if(sub_str == "111"){s_oct += "7";}
        }
       return s_oct;
    }
    if(n == 16){
        while(s_bin.length()%4!=0){
            s_bin = "0"+s_bin;
        }
        for(int j=0;j<(int)s_bin.length();j+=4){
            string sub_str = s_bin.substr(j,4);
            if(sub_str == "0000"){s_hex += "0";}
            else if(sub_str == "0001"){s_hex += "1";}
            else if(sub_str == "0010"){s_hex += "2";}
            else if(sub_str == "0011"){s_hex += "3";}
            else if(sub_str == "0100"){s_hex += "4";}
            else if(sub_str == "0101"){s_hex += "5";}
            else if(sub_str == "0110"){s_hex += "6";}
            else if(sub_str == "0111"){s_hex += "7";}
            else if(sub_str == "1000"){s_hex += "8";}
            else if(sub_str == "1001"){s_hex += "9";}
            else if(sub_str == "1010"){s_hex += "A";}
            else if(sub_str == "1011"){s_hex += "B";}
            else if(sub_str == "1100"){s_hex += "C";}
            else if(sub_str == "1101"){s_hex += "D";}
            else if(sub_str == "1110"){s_hex += "E";}
            else if(sub_str == "1111"){s_hex += "F";}
        }
        return s_hex;
    }
    return "EOF";
}
Publicado 27 artículos originales · ganado elogios 62 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/qq_42359956/article/details/87625522
Recomendado
Clasificación