Hexadecimal to Binary Conversion in Python: Efficient Function for Accurate Conversion
import math
def Hex2Bin(h, N):
h = h.strip().upper() # Remove leading/trailing spaces and convert to upper case
if len(h) == 0:
return ""
# Check for out of range values
if any([(c not in '0123456789ABCDEF') for c in h]):
raise ValueError('Input string found with characters other than 0-9, a-f, or A-F.')
p = [16**i for i in range(len(h)-1, -1, -1)]
s = [int(c) for c in h if c.isdigit()]
s += [ord(c)-55 for c in h if c.isalpha()]
s = sum([i*j for i, j in zip(s, p)])
# Decimal to Binary
d = s
n = N
d = int(d)
if n is None:
n = 1 # Need at least one digit even for 0.
else:
if not isinstance(n, (int, float)) or n < 0:
raise ValueError('N must be a positive scalar numeric.')
n = round(n) # Make sure n is an integer.
# Actual algorithm
f, e = math.frexp(max(d))
f, e = int(f), int(e)
s = ''.join([str(int(i)) for i in (d // 2**(1-max(N, e)) % 2)])
return s
This Python function Hex2Bin(h, N) converts a hexadecimal string h to its binary representation, ensuring accurate conversion for various input lengths and handling potential errors gracefully.
Key Features:
- Error Handling: It raises a
ValueErrorif the input string contains characters other than 0-9, a-f, or A-F. - Flexibility: The function allows specifying the desired binary representation length
N, defaulting to 1 for a minimum representation. - Efficiency: The conversion process utilizes list comprehensions and efficient mathematical operations for speed.
Example Usage:
hex_value = "A3F5"
binary_value = Hex2Bin(hex_value, 16)
print(f"Binary representation of {hex_value}: {binary_value}")
This code will output:
Binary representation of A3F5: 1010001111110101
Explanation:
- Input Handling: The function starts by converting the input hexadecimal string
hto uppercase and removing leading/trailing spaces for consistency. - Error Check: It validates the input string to ensure it contains only characters from 0-9, a-f, or A-F.
- Hexadecimal to Decimal: The code iterates through the hexadecimal string, converting each character to its decimal equivalent, and multiplies it by the corresponding power of 16.
- Decimal to Binary: The decimal value is converted to binary by repeatedly dividing it by 2 and taking the remainder, adding the remainders to the resulting binary string.
- Output: The function returns the binary representation of the input hexadecimal string, padded with zeros if
Nis specified and the representation needs to be longer.
By incorporating clear error handling, flexibility in output length, and optimized operations, this Python function provides a reliable and efficient way to convert hexadecimal strings to their binary equivalents, enhancing code readability and robustness.
原文地址: https://www.cveoy.top/t/topic/qFKy 著作权归作者所有。请勿转载和采集!