Dado un Número Binario , la tarea es convertir el número binario dado a su número hexadecimal equivalente . La entrada podría ser muy grande y puede que no encaje ni siquiera en un int largo largo sin firmar.
Ejemplos:
Input: 110001110 Output: 18E Input: 1111001010010100001.010110110011011 Output: 794A1.5B36
Enfoque 1:
Número binario: Un número binario es un número expresado en el sistema numérico binario de base 2, que utiliza solo dos símbolos: 0 (cero) y 1 (uno).
4 Número hexadecimal: Un número hexadecimal es un sistema de numeración posicional con una raíz o base de 16 y utiliza dieciséis símbolos distintos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A , B, C, D, E y F.
Convertir binario a hexadecimal:
todos sabemos que 2 4 = 16 1 .
En otras palabras, un solo dígito en base 16 se puede representar usando 4 dígitos en base 2.
Para convertir un número binario a hexadecimal, se toman los siguientes pasos:
- Agrupa el Número Binario dado en grupos de 4 bits, cada grupo tomado individualmente desde la izquierda y la derecha del punto decimal.
- Obtenga la longitud de la substring a la izquierda y derecha del punto decimal (‘.’) como left_len y right_len .
- Si left_len no es un múltiplo de 4, es decir, no es posible agrupar en un grupo exacto de 4 bits, agregue un número mínimo de 0 al principio para que la longitud de la substring izquierda sea un múltiplo de 4.
- De manera similar, si right_len no es un múltiplo de 4, agregue un número mínimo de 0 al final para hacer que la longitud de la substring derecha sea un múltiplo de 4.
- Ahora, desde la izquierda, extraiga cada grupo (substrings de longitud 4) uno por uno y agregue su código hexadecimal correspondiente al resultado.
- Si se encuentra un decimal (‘.’) en el medio, agréguelo al resultado.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ implementation to // convert a binary number to hexadecimal number #include <bits/stdc++.h> using namespace std; // Function to create map between binary // number and its equivalent hexadecimal void createMap(unordered_map<string, char> *um) { (*um)["0000"] = '0'; (*um)["0001"] = '1'; (*um)["0010"] = '2'; (*um)["0011"] = '3'; (*um)["0100"] = '4'; (*um)["0101"] = '5'; (*um)["0110"] = '6'; (*um)["0111"] = '7'; (*um)["1000"] = '8'; (*um)["1001"] = '9'; (*um)["1010"] = 'A'; (*um)["1011"] = 'B'; (*um)["1100"] = 'C'; (*um)["1101"] = 'D'; (*um)["1110"] = 'E'; (*um)["1111"] = 'F'; } // function to find hexadecimal // equivalent of binary string convertBinToHex(string bin) { int l = bin.size(); int t = bin.find_first_of('.'); // length of string before '.' int len_left = t != -1 ? t : l; // add min 0's in the beginning to make // left substring length divisible by 4 for (int i = 1; i <= (4 - len_left % 4) % 4; i++) bin = '0' + bin; // if decimal point exists if (t != -1) { // length of string after '.' int len_right = l - len_left - 1; // add min 0's in the end to make right // substring length divisible by 4 for (int i = 1; i <= (4 - len_right % 4) % 4; i++) bin = bin + '0'; } // create map between binary and its // equivalent hex code unordered_map<string, char> bin_hex_map; createMap(&bin_hex_map); int i = 0; string hex = ""; while (1) { // one by one extract from left, substring // of size 4 and add its hex code hex += bin_hex_map[bin.substr(i, 4)]; i += 4; if (i == bin.size()) break; // if '.' is encountered add it // to result if (bin.at(i) == '.') { hex += '.'; i++; } } // required hexadecimal number return hex; } // Driver program to test above int main() { string bin = "1111001010010100001.010110110011011"; cout << "Hexadecimal number = " << convertBinToHex(bin); return 0; }
Java
// Java implementation to convert a // binary number to hexadecimal number import java.io.*; import java.util.*; class GFG{ // Function to create map between binary // number and its equivalent hexadecimal static void createMap(Map<String, Character> um) { um.put("0000", '0'); um.put("0001", '1'); um.put("0010", '2'); um.put("0011", '3'); um.put("0100", '4'); um.put("0101", '5'); um.put("0110", '6'); um.put("0111", '7'); um.put("1000", '8'); um.put("1001", '9'); um.put("1010", 'A'); um.put("1011", 'B'); um.put("1100", 'C'); um.put("1101", 'D'); um.put("1110", 'E'); um.put("1111", 'F'); } // Function to find hexadecimal // equivalent of binary static String convertBinToHex(String bin) { int l = bin.length(); int t = bin.indexOf('.'); // Length of string before '.' int len_left = t != -1 ? t : l; // Add min 0's in the beginning to make // left substring length divisible by 4 for(int i = 1; i <= (4 - len_left % 4) % 4; i++) bin = '0' + bin; // If decimal point exists if (t != -1) { // Length of string after '.' int len_right = l - len_left - 1; // Add min 0's in the end to make right // substring length divisible by 4 for(int i = 1; i <= (4 - len_right % 4) % 4; i++) bin = bin + '0'; } // Create map between binary and its // equivalent hex code Map<String, Character> bin_hex_map = new HashMap<String, Character>(); createMap(bin_hex_map); int i = 0; String hex = ""; while (true) { // One by one extract from left, substring // of size 4 and add its hex code hex += bin_hex_map.get( bin.substring(i, i + 4)); i += 4; if (i == bin.length()) break; // If '.' is encountered add it // to result if (bin.charAt(i) == '.') { hex += '.'; i++; } } // Required hexadecimal number return hex; } // Driver code public static void main(String[] args) { String bin = "1111001010010100001.010110110011011"; System.out.print("Hexadecimal number = " + convertBinToHex(bin)); } } // This code is contributed by jithin
Python3
## Python implementation to ## convert a binary number to hexadecimal numberh ## Function to create map between binary ## number and its equivalent hexadecimal def createMap(um): um["0000"] = '0' um["0001"] = '1' um["0010"] = '2' um["0011"] = '3' um["0100"] = '4' um["0101"] = '5' um["0110"] = '6' um["0111"] = '7' um["1000"] = '8' um["1001"] = '9' um["1010"] = 'A' um["1011"] = 'B' um["1100"] = 'C' um["1101"] = 'D' um["1110"] = 'E' um["1111"] = 'F' ## function to find hexadecimal ## equivalent of binary def convertBinToHex(bin): l = len(bin) t = bin.find('.') ## length of string before '.' len_left = None if (t != -1): len_left = t else: len_left = l ## add min 0's in the beginning to make ## left substring length divisible by 4 for i in range(1, 1 + (4 - len_left % 4) % 4): bin = '0' + bin; ## if decimal point exists if (t != -1): ## length of string after '.' len_right = l - len_left - 1 ## add min 0's in the end to make right ## substring length divisible by 4 for i in range(1, 1 + (4 - len_right % 4) % 4): bin = bin + '0' ## create map between binary and its ## equivalent hex code bin_hex_map = {} createMap(bin_hex_map) i = 0; hex = "" while True: ## one by one extract from left, substring ## of size 4 and add its hex code hex += bin_hex_map[bin[i: i+4]]; i += 4; if (i == len(bin)): break; ## if '.' is encountered add it ## to result if (bin[i] == '.'): hex += '.'; i+=1 ## required hexadecimal number return hex; ## Driver code if __name__=='__main__': bin = "1111001010010100001.010110110011011" print("Hexadecimal number =", convertBinToHex(bin)); # This code is contributed by subhamgoyal2014.
C#
// C# implementation to convert a // binary number to hexadecimal number using System; using System.Collections.Generic; public class GFG { // Function to create map between binary // number and its equivalent hexadecimal static IDictionary<string, char> createMap(IDictionary<string, char> um) { um.Add("0000", '0'); um.Add("0001", '1'); um.Add("0010", '2'); um.Add("0011", '3'); um.Add("0100", '4'); um.Add("0101", '5'); um.Add("0110", '6'); um.Add("0111", '7'); um.Add("1000", '8'); um.Add("1001", '9'); um.Add("1010", 'A'); um.Add("1011", 'B'); um.Add("1100", 'C'); um.Add("1101", 'D'); um.Add("1110", 'E'); um.Add("1111", 'F'); return um; } // Function to find hexadecimal // equivalent of binary static String convertBinToHex(String bin) { int i; int l = bin.Length; int t = bin.IndexOf('.'); // Length of string before '.' int len_left = t != -1 ? t : l; // Add min 0's in the beginning to make // left substring length divisible by 4 for (i = 1; i <= (4 - len_left % 4) % 4; i++) bin = '0' + bin; // If decimal point exists if (t != -1) { // Length of string after '.' int len_right = l - len_left - 1; // Add min 0's in the end to make right // substring length divisible by 4 for (i = 1; i <= (4 - len_right % 4) % 4; i++) bin = bin + '0'; } // Create map between binary and its // equivalent hex code IDictionary<string, char> bin_hex_map = new Dictionary<string, char>(); bin_hex_map = createMap(bin_hex_map); i = 0; string hex = ""; while (true) { // One by one extract from left, substring // of size 4 and add its hex code hex += bin_hex_map[bin.Substring(i, 4)]; i += 4; if (i == bin.Length) break; // If '.' is encountered add it // to result if (bin[i] == '.') { hex += '.'; i++; } } // Required hexadecimal number return hex; } public static void Main(string[] args) { string bin = "1111001010010100001.010110110011011"; Console.WriteLine("Hexadecimal number = " + convertBinToHex(bin)); } } // This code is contributed by phasing17.
Javascript
// JavaScript implementation to // convert a binary number to hexadecimal number // Function to create map between binary // number and its equivalent hexadecimal function createMap(um) { um.set("0000", '0'); um.set("0001", '1'); um.set("0010", '2'); um.set("0011", '3'); um.set("0100", '4'); um.set("0101", '5'); um.set("0110", '6'); um.set("0111", '7'); um.set("1000", '8'); um.set("1001", '9'); um.set("1010", 'A'); um.set("1011", 'B'); um.set("1100", 'C'); um.set("1101", 'D'); um.set("1110", 'E'); um.set("1111", 'F'); } // function to find hexadecimal // equivalent of binary function convertBinToHex(bin) { let l = bin.length; let t = bin.indexOf('.'); // length of string before '.' let len_left = t != -1 ? t : l; // add min 0's in the beginning to make // left substring length divisible by 4 for (let i = 1; i <= (4 - len_left % 4) % 4; i++) bin.unshift('0'); // if decimal point exists if (t != -1) { // length of string after '.' let len_right = l - len_left - 1; // add min 0's in the end to make right // substring length divisible by 4 for (let i = 1; i <= (4 - len_right % 4) % 4; i++) bin.push('0'); } // create map between binary and its // equivalent hex code let bin_hex_map = new Map(); createMap(bin_hex_map); let i = 0; let hex = new Array(); while (1) { // one by one extract from left, substring // of size 4 and add its hex code hex.push(bin_hex_map.get(bin.slice(i, i+4).join(''))); i = i + 4; if (i == bin.length) break; // if '.' is encountered add it // to result if (bin[i] == '.') { hex.push('.'); i = i + 1; } } // required hexadecimal number return hex; } // Driver program to test above let bin = "1111001010010100001.010110110011011"; console.log("Hexadecimal number =", convertBinToHex(bin.split('')).join('')); // The code is contributed by Gautam goel (gautamgoel962)
Producción:
Hexadecimal number = 794A1.5B36
Complejidad de tiempo: O(n) , donde n es la longitud de la string.
Enfoque 2: otro enfoque para convertir un número binario en un número hexadecimal es convertir primero el número binario en un número decimal y luego convertir el número decimal obtenido en un número hexadecimal equivalente .
Preguntas de práctica:
(1) Convierta el número binario 111000 a hexadecimal.
(2) Convierta el número binario 100100001 a hexadecimal.
(3) Convierta el número binario 1001001111 a hexadecimal.
(4) ¿Cuál es el equivalente binario del número hexadecimal A7C5?
(5) ¿Cuál es el equivalente binario del número hexadecimal 2A.FF.
Answers: (1) 38 (2) 121 (3) 24F (4) 1010011111000101 (5) 101010.11111111
Este artículo es una contribución de Ayush Jauhari . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA