12,945,401 members (56,638 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 17-Feb-13 23:41pm
Andreas Gieriet 18-Feb-13 15:42pm

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.

Top Experts
Last 24hrsThis month
 CHill60 240 OriginalGriff 186 Maciej Los 155 F-ES Sitecore 108 stivanov 75
 OriginalGriff 4,781 CHill60 3,135 Maciej Los 2,443 Jochen Arndt 1,910 ppolymorphe 1,765