1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- //
- // Example code - use without restriction.
- //
- HexStr2Decimal(STRING HexIn) := FUNCTION
- //type re-definitions to make code more readable below
- BE1 := BIG_ENDIAN UNSIGNED1;
- BE2 := BIG_ENDIAN UNSIGNED2;
- BE3 := BIG_ENDIAN UNSIGNED3;
- BE4 := BIG_ENDIAN UNSIGNED4;
- BE5 := BIG_ENDIAN UNSIGNED5;
- BE6 := BIG_ENDIAN UNSIGNED6;
- BE7 := BIG_ENDIAN UNSIGNED7;
- BE8 := BIG_ENDIAN UNSIGNED8;
- TrimHex := TRIM(HexIn,ALL);
- HexLen := LENGTH(TrimHex);
- UseHex := IF(HexLen % 2 = 1,'0','') + TrimHex;
- //a sub-function to translate two hex chars to a packed hex format
- STRING1 Str2Data(STRING2 Hex) := FUNCTION
- UNSIGNED1 N1 := CASE(Hex[1],
- '0'=>00x,'1'=>10x,'2'=>20x,'3'=>30x,
- '4'=>40x,'5'=>50x,'6'=>60x,'7'=>70x,
- '8'=>80x,'9'=>90x,'A'=>0A0x,'B'=>0B0x,
- 'C'=>0C0x,'D'=>0D0x,'E'=>0E0x,'F'=>0F0x,00x);
- UNSIGNED1 N2 := CASE(Hex[2],
- '0'=>00x,'1'=>01x,'2'=>02x,'3'=>03x,
- '4'=>04x,'5'=>05x,'6'=>06x,'7'=>07x,
- '8'=>08x,'9'=>09x,'A'=>0Ax,'B'=>0Bx,
- 'C'=>0Cx,'D'=>0Dx,'E'=>0Ex,'F'=>0Fx,00x);
- RETURN (>STRING1<)(N1 | N2);
- END;
- UseHexLen := LENGTH(TRIM(UseHex));
- InHex2 := Str2Data(UseHex[1..2]);
- InHex4 := InHex2 + Str2Data(UseHex[3..4]);
- InHex6 := InHex4 + Str2Data(UseHex[5..6]);
- InHex8 := InHex6 + Str2Data(UseHex[7..8]);
- InHex10 := InHex8 + Str2Data(UseHex[9..10]);;
- InHex12 := InHex10 + Str2Data(UseHex[11..12]);
- InHex14 := InHex12 + Str2Data(UseHex[13..14]);
- InHex16 := InHex14 + Str2Data(UseHex[15..16]);
- RETURN CASE(UseHexLen,
- 2 =>(STRING)(>BE1<)InHex2,
- 4 =>(STRING)(>BE2<)InHex4,
- 6 =>(STRING)(>BE3<)InHex6,
- 8 =>(STRING)(>BE4<)InHex8,
- 10=>(STRING)(>BE5<)InHex10,
- 12=>(STRING)(>BE6<)InHex12,
- 14=>(STRING)(>BE7<)InHex14,
- 16=>(STRING)(>BE8<)InHex16,
- 'ERROR');
- END;
- OUTPUT(HexStr2Decimal('0101')); // 257
- OUTPUT(HexStr2Decimal('FF')); // 255
- OUTPUT(HexStr2Decimal('FFFF')); // 65535
- OUTPUT(HexStr2Decimal('FFFFFF')); // 16777215
- OUTPUT(HexStr2Decimal('FFFFFFFF')); // 4294967295
- OUTPUT(HexStr2Decimal('FFFFFFFFFF')); // 1099511627775
- OUTPUT(HexStr2Decimal('FFFFFFFFFFFF')); // 281474976710655
- OUTPUT(HexStr2Decimal('FFFFFFFFFFFFFF')); // 72057594037927935
- OUTPUT(HexStr2Decimal('FFFFFFFFFFFFFFFF')); // 18446744073709551615
- OUTPUT(HexStr2Decimal('FFFFFFFFFFFFFFFFFF')); // ERROR
|