将int转换为BCD字节数组

Roa*_*ast 5 .net c# encryption bcd

我想使用BCD将int转换为byte [2]数组.

有问题的int将来自表示Year的DateTime,必须转换为两个字节.

是否有任何预制功能可以做到这一点,或者你能给我一个简单的方法吗?

例:

int year = 2010
Run Code Online (Sandbox Code Playgroud)

输出:

byte[2]{0x20, 0x10};
Run Code Online (Sandbox Code Playgroud)

Han*_*ant 11

    static byte[] Year2Bcd(int year) {
        if (year < 0 || year > 9999) throw new ArgumentException();
        int bcd = 0;
        for (int digit = 0; digit < 4; ++digit) {
            int nibble = year % 10;
            bcd |= nibble << (digit * 4);
            year /= 10;
        }
        return new byte[] { (byte)((bcd >> 8) & 0xff), (byte)(bcd & 0xff) };
    }
Run Code Online (Sandbox Code Playgroud)

请注意,您要求获得大端结果,这有点不寻常.

  • 如果他正在使用嵌入式硬件,那么Big-endian可能并不常见. (3认同)