FlexibleInteger-Variablen

WinHex & X-Ways

Flexible Integer-Variablen

 

Ein besonderer Variablentyp, der von Schablonen unterstützt wird, ist uint_flex. Dieser Typ ermöglicht es, einen vorzeichenlosen Integer-Wert aus verschiedenen individuellen Bits innerhalb eines 32-Bit- (4-Byte-) Bereichs in beliebiger Reihenfolge zusammenzusetzen, und ist sogar flexibler als das sogenannte Bit-Feld der Programmiersprache C.

 

uint_flex erfordert als zusätzlichen Parameter eine Zeichenkette in Anführungszeichen, die genau festlegt, welche Bits in welcher Reihenfolge verwendet werden, getrennt von Kommas. Das zuerst genannte Bit wird das signifikanteste (höchstwertige) Bit in der resultierenden Zahl und es wird nicht als Vorzeichen interpretiert. Das zuletzt genannte Bit wird das insignifikanteste Bit der resultierenden Zahl.

 

Die Bits werden gezählt beginnend mit 0. Bit 0 ist das am wenigsten signifikante Bit des ersten Bytes. Bit 31 ist das signifikanteste Bit des vierten Bytes. Die Definition basiert also auf der little-endian Philosophie.

 

Zum Beispiel ist

uint_flex "15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0" "Standard 16-Bit-Integer"

genau das gleiche wie uint16, die gewöhnliche vorzeichenlose 16-Bit-Integer Variable.

 

uint_flex "31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0" "Standard 32-Bit-Integer"

ist genau das gleiche wie uint32, die gewöhnliche vorzeichenlose 32-Bit-Integer Variable.

 

Der Vorteil von uint_flex ist aber der, daß die Anzahl, die Position und die Interpretationsreihenfolge aller Bits völlig frei gewählt werden kann. Zum Beispiel erzeugt

uint_flex "7,15,23,31" "Ein ungewöhnlicher 4-Bit-Integer"

einen 4-Bit-Integer aus den jeweils signifikantesten Bits von jedem der vier beteiligten Bytes. Wenn diese vier Bytes beispielsweise den Wert F0 A0 0F 0A = 11110000 10100000 00001111 00001010 besitzen, dann gilt: Bit 7 ist 1, Bit 15 ist 1, Bit 23 ist 0 und Bit 31 ist 0. Der resultierende uint_flex ist also 1100 = 1*8 + 1*4 + 0*2 + 0*1 = 12.