12,751,306 members (33,954 online)
Rate this:
See more: (untagged)
I have small favor to ask.Anybody know the formula to convert binary coded decimal to Bin as well as hex.Kind regards.
Posted 18-Feb-13 0:41am
Andreas Gieriet 18-Feb-13 15:42pm

Please remove your solution #2 - this is not a solution.
If you want to answer to solution #1, use [have a question or comment] button.
Andi

Rate this:

Rate this:

## Solution 3

```int i = 0x12345678; // assuming: BCD encoded
int v = 0;
foreach (byte b in BitConverter.GetBytes(i).Reverse())
{
int r = (b & 0x0F) + 10 * ((b >> 4) & 0x0F);
v *= 100;
v += r;
Console.WriteLine("0x{0:X2} -> {1} = 0x{1:X2}", b, r);
}
Console.WriteLine("0x{0:X8} -> {1} = 0x{1:X8}", i, v);```
This results in:
```0x12 -> 12 = 0x0C
0x34 -> 34 = 0x22
0x56 -> 56 = 0x38
0x78 -> 78 = 0x4E
0x12345678 -> 12345678 = 0x00BC614E```

Not speed optimized, though.

[EDIT]
You may try to optimize as follows:
1) `10 * x = (8 + 2) * x = (x << 3) + (x << 1)`
2) `10 * (b >> 4) = ((b >> 4) << 3) + ((b >> 4) << 1)`
3) `10 * (b >> 4) = (b >> 1) + (b >> 3)`
Since right shift is arithmetic shift, and since the shifted 4 bits need to be isolated from the rest, we must mask the results of the right shift to the respective 4 bits in the bit pattern:
4) `10 * (b >> 4) = ((b >> 1) & 0x78) + ((b >> 3) & 0x1E)`

Similarily, v *= 100 can be optimized:
1) `v *= 100 --> v *= (64 + 32 + 4) --> v = (v << 6) + (v << 5) + (v << 2)`

Putting all together:
```int i = 0x12345678;
int v = 0;
foreach(byte b in BitConverter.GetBytes(i).Reverse())
{
v = (v << 6) + (v << 5) + (v << 2); // next byte: multiply by 100
v += (b & 0x0F) + ((b >> 1) & 0x78) + ((b >> 3) & 0x1E); // 0xUV = 0x0V + 10 * (0xU0 / 16) = 0x0V + 1/2*0xU0 + 1/8*0xU0
}
Console.WriteLine("0x{0:X8} -> {1} = 0x{1:X8}", i, v);```

[/EDIT]

Cheers
Andi
v7
Rate this:

## Solution 2

Thanks a lot. Now I get it to convert Bcd to hex u just replace each with its Bin equivalent then convert that to hex. Much appreciated. Helpful.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Top Experts
Last 24hrsThis month
 Karthik Bangalore 330 Graeme_Grant 313 Maciej Los 125 Jochen Arndt 105 Bryian Tan 105
 OriginalGriff 3,863 Peter Leow 2,891 Karthik Bangalore 2,330 ppolymorphe 2,062 Richard MacCutchan 1,474

Advertise | Privacy | Mobile
Web01 | 2.8.170215.1 | Last Updated 18 Feb 2013