DateTime到BCD表示

时间:2012-02-25 17:58:29

标签: c# datetime

如何将DateTime(yyyyMMddhhmm)转换为c#上的压缩bcd(大小6)表示?

using System;

namespace Exercise
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            byte res = to_bcd(12);
        }

        private static byte to_bcd(int n)
        {
            // extract each digit from the input number n
            byte d1 = Convert.ToByte(n/10);
            byte d2 = Convert.ToByte(n%10);
            // combine the decimal digits into a BCD number
            return Convert.ToByte((d1 << 4) | d2);
        }
    }
}

你得到res变量的结果是18。

谢谢!

2 个答案:

答案 0 :(得分:2)

当您传递给to_bcd时,得到的是正确的18 == 12(十六进制)。

static byte[] ToBCD(DateTime d)
{
    List<byte> bytes = new List<byte>();
    string s = d.ToString("yyyyMMddHHmm");
    for (int i = 0; i < s.Length; i+=2 )
    {
        bytes.Add((byte)((s[i] - '0') << 4 | (s[i+1] - '0')));
    }
    return bytes.ToArray();
}

答案 1 :(得分:1)

我将举一个简短的例子来证明这个想法。您可以将此解决方案扩展为整个日期格式输入。

BCD格式将两个十进制数字精确地封装成一个8位数字。例如,92的表示形式为二进制:

1001 0010
十六进制中的

0x92。转换为十进制时,这恰好是146

执行此操作的代码需要将第一个数字左移4位,然后与第二个数字组合。所以:

byte to_bcd(int n)
{
    // extract each digit from the input number n
    byte d1 = n / 10;
    byte d2 = n % 10;
    // combine the decimal digits into a BCD number
    return (d1 << 4) | d2;
}