Nach einigen Stunden für diese Frage suchen, fand ich eine Lösung.
Es rechnet jede hexadezimale Zahl als eine 4-Bit-Ganzzahl ab, obwohl dies nicht immer wahr ist, wird es auch kein Problem sein.
Beispiel: 0x7 ist 0b111. Und so wird die Ganzzahl in Python 3 Bits haben. Erkundigen Sie sich bei:
a = 7
print(a.bit_length())
#3
Aber wenn es von der höchstwertigen Stelle (Signal-Bit) keine vierte Bit ist, wird es als 0 berechnet werden, genau das, was wir in diesem Fall wollen.
also der Code (nicht optimiert), aber die meisten lesbar ich darstellen kann, ist dies:
HEX_BITS = 4
def shift_left1(bits):
#Left shift adding 1 instead of 0
mask = 0
for i in range(bits):
mask = (mask << 1) + 1
return mask
def hex_signal(value, bits):
# Retuns the mask with bit signal
signal_mask = 1 << bits
return -(value & (signal_mask))
def hex_without_signal(value, bits):
# Returns value with the number of bits given (from less significant to most)
return value & shift_left1(bits)
def hex2dec(hstring, signed=True):
value = int(hstring, 16)
if signed: #Do we want to check the signal?
value_bits = len(hstring) * HEX_BITS # A full hex digit have four bits
shift_times = value_bits - 1 # Times to subfunctions shifts
signal_mask = hex_signal(value, shift_times) # Mask with bit value setted
unsigned_hex_mask = hex_without_signal(value, shift_times) # Value without most significant bit
return signal_mask | unsigned_hex_mask # Or bit a bit from the unsigned value and signal mask
else: # If not just returns the native conversion
return value
Beispiele:
print(hex2dec("2"))
#2
print(hex2dec("E"))
#-2
print(hex2dec("4"))
#4
print(hex2dec("FF"))
#-1
print(hex2dec("0F"))
#15
print(hex2dec("1F"))
#31
print(hex2dec("1234"))
#4660
print(hex2dec("9F1281F0"))
#-1626177040
Dieses besser [Dokumentation] gebucht werden konnten (http : //stackoverflow.com/documentation). – Selcuk
Ich stimme für das Schließen dieser Frage als Off-Topic ab, da es sich nicht um eine Frage, sondern um ein Codebeispiel handelt. – Selcuk
Nun, es gibt Fragen dazu ... aber ich kann noch nicht antworten. Ich habe das Bedürfnis und denke, dass es mehr Menschen helfen kann. –