非压缩的BCD码以8位为一组表示一个十进制数,8位中的低4位表示8421
的BCD码,而高4位则没有意义,那么:
public byte[] ToBCD(byte val) {
   string str = val.ToString();
   byte[] res = new byte[str.Length];
   for (int i = 0; i < str.Length; i++) {
      res[res.Length - 1 - i] = (byte) (str[i] - 48);
   }
   return res;
}
public byte FromBCD(byte[] vals) {
   StringBuilder sb = new StringBuilder();
   for (int i = vals.Length - 1; i >= 0; i--) {
      sb.Append((char)(vals[i] + 48));
   }
   return Byte.Parse(sb.ToString());
}

解决方案 »

  1.   

    压缩的BCD码以4位为一组表示一个十进制数:
    public static int ToBCD(byte val) {
       int res = 0;
       int bit = 0;
       while (val >= 10) {
         res |= (val % 10 << bit);
         val /= 10;
         bit += 4;
       }
       res |= val << bit;
       return res;
    }
    public static byte FromBCD(int vals) {
       int c = 1;
       byte b = 0;
       while (vals > 0) {
          b += (byte) ((vals & 0xf) * c);
          c *= 10;
          vals >>= 4;
       }
       return b;
    }
      

  2.   

    BCD码就是以二进制转十六进制的方法来转换成十进制数的一种编码方法。如:1111转十六进制为F 在BDE码中为10
      

  3.   

    public static long ToBCD(long val) {
       long res = 0;
       int bit = 0;
       while (val >= 10) {
         res |= (val % 10 << bit);
         val /= 10;
         bit += 4;
       }
       res |= val << bit;
       return res;
    }
    public static long FromBCD(long vals) {
       long c = 1;
       long b = 0;
       while (vals > 0) {
          b += ((vals & 0xf) * c);
          c *= 10;
          vals >>= 4;
       }
       return b;
    }