में कनवर्ट करने का सबसे प्रभावी तरीका मेरे पास 32 बिट बीसीडी वैल्यू (दो यूंट हिस्सों में आपूर्ति) को एक बाइनरी वैल्यू में बदलने के लिए नीचे दिया गया कोड है।बीसीडी को बाइनरी
0x99999999 का अधिकतम मूल्य बनाने के लिए आपूर्ति किए गए मान 0x9999 तक हो सकते हैं।
क्या यह हासिल करने के लिए कोई बेहतर (यानी तेज) तरीका है?
/// <summary>
/// Convert two PLC words in BCD format (forming 8 digit number) into single binary integer.
/// e.g. If Lower = 0x5678 and Upper = 0x1234, then Return is 12345678 decimal, or 0xbc614e.
/// </summary>
/// <param name="lower">Least significant 16 bits.</param>
/// <param name="upper">Most significant 16 bits.</param>
/// <returns>32 bit unsigned integer.</returns>
/// <remarks>If the parameters supplied are invalid, returns zero.</remarks>
private static uint BCD2ToBin(uint lower, uint upper)
{
uint binVal = 0;
if ((lower | upper) != 0)
{
int shift = 0;
uint multiplier = 1;
uint bcdVal = (upper << 16) | lower;
for (int i = 0; i < 8; i++)
{
uint digit = (bcdVal >> shift) & 0xf;
if (digit > 9)
{
binVal = 0;
break;
}
else
{
binVal += digit * multiplier;
shift += 4;
multiplier *= 10;
}
}
}
return binVal;
}
मेरे लिए बहुत अच्छा लग रहा है लानत। – Spence
अगर हम केवल 16 बिट्स का प्रतिनिधित्व करते हैं तो यह दो यूट्स के बजाय दो यूंट्स क्यों लेता है? –