RGB COLOR Hex/Decimal Conversion Without Bitwise Code
I successfully built a HEX to DEC and DEC to HEX RGB color converter using intermediary Binary number conversion and Bitwise parsing as suggested by a response to a prior posting, and consistent with the Bitwise conversion instructions in the Flash ActionScript Bible. Thank you so much.
However, Binary numbers and Bitwise work is fairly opaque to me. Thinking and reading in Binary does not come easy. So I asked a former software partner about it. At first, he was amazed that there was an issue, because his core skill is LotusScript which has a builtin HEX/DEC converter object. However, he rembered Assembler language algorithms that did not require a Binary intermediary  one that works directly between HEX and DEC.
Here are his comments. Any thoughts about one method over the other for ActionScript?. It seems easier to code and probably easier to read when the code is revisited some time later.
* * * *
As I correctly recalled, there is an easy conversion formula that bypasses
converting to binary and allows direct conversion from hex to decimal (the
book shows a couple methods of direct conversion between number systems 
including hex to binary and decimal to binary).
For hexadecimal numbers, the Least Significant Bit (the rightmost character
in the hex value  we'll call it LSB) will always have a decimal value of
015 (hex values 0F). Each additional hex value to left of the LSB will
have a decimal value of 16 to power of it's position away from the LSB
times the hex value decimal equivalent (if it's one position to the left of
the LSB, it will have a value of 16 to the power of 1 times the decimal
equivalent of 0F, if it's 2 positions to the left it will have a value of
16 to the power of 2 times the decimal equivalent of 0F, and so on). The
decimal value is the sum of all computed decimal values for each hex value.
This rule holds true for all hex values  regardless of size.
Since the decimal color pallette only ranges from 0255 (that equates to
hex 0FF), your conversion formula would be fairly simple. Set up either
an array or even simpler, a set of 16 variables where LSB hex values are
defined as their decimal equivalents (0=0, 1=1,2=2...A=10, B=11...F=15).
If the length of your hex value is one character, there really is no
conversion that has to be done  just use the value that is defined in the
array or the variable that you set up. If the length of the hex value is
two characters, the formula above can be used to convert directly to hex.
For example, if you have hex 8A, the routine would go something like this:
LSB = A (hex) = 10 (decimal)
MSB (Most Sig. Bit) = 8 (hex) = 128 (decimal) = 16 to the power of 1 times
8 = 16 * 8
Decimal Value of 8A hex = 138 (10+128)
Expanding on these calculations, a loop could be built to do this
conversion for any size hex value. It would look something like this
pseudocode:
set computed decimal value to zero
set significant bit counter to zero
get LSB of the hex value
while
there are significant bits to be processed in the hex value
compute 16 to the power of significant bit counter
multiply our decimal equivalent of the hex value (from the table or
array) by the computed value above
add this value to the computed decimal value
get next significant bit
increment significant bit counter by one
while end
I think the larger the hex value is, the more apparent the equation
becomes. Here's a mathematical example of converting 2A5:
2A5 = 16pwr0 * 5 + 16pwr1 * A + 16pwr2 * 2
= 1 * 5 + 16 * 10 + 16 * 16 * 2
= 5 + 160 + 512 = 677
Last edited by AniComUS; 10132005 at 04:09 PM.
Reason: spelling
