J'ai le code ci-dessous pour convertir une valeur BCD de 32 bits (fournie en deux moitiés uint) en une valeur binaire uint.Le moyen le plus efficace de convertir BCD en binaire
Les valeurs fournies peuvent être jusqu'à 0x9999, pour former une valeur maximale de 0x99999999.
Existe-t-il une meilleure façon (c'est-à-dire plus rapide) d'y parvenir?
/// <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;
}
semble assez sacrément bon pour moi. – Spence
Pourquoi faut-il deux uints plutôt que des ushorts, si chacun ne représente que 16 bits? –