Click here to Skip to main content
Rate this: bad
good
Please Sign up or sign in to vote.
See more: digital logic
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
Comments
Andreas Gieriet at 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: bad
good
Please Sign up or sign in to vote.

Solution 1

  Permalink  
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 3

How about (C#):
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
  Permalink  
v7
Rate this: bad
good
Please Sign up or sign in to vote.

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.
  Permalink  

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

  Print Answers RSS
0 BillWoodruff 330
1 Mathew Soji 309
2 Maciej Los 295
3 DamithSL 225
4 Afzaal Ahmad Zeeshan 217
0 OriginalGriff 6,369
1 Sergey Alexandrovich Kryukov 5,973
2 DamithSL 5,183
3 Manas Bhardwaj 4,673
4 Maciej Los 4,025


Advertise | Privacy | Mobile
Web04 | 2.8.1411019.1 | Last Updated 18 Feb 2013
Copyright © CodeProject, 1999-2014
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100