首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于BCD编码 完全蒙了 求解答解决方案

2012-03-19 
关于BCD编码 完全蒙了 求解答10404000014 这个数 转成BCD码我算的是下面这样0001000001000000010000000000

关于BCD编码 完全蒙了 求解答
10404000014 这个数 转成BCD码 我算的是下面这样
00010000010000000100000000000000000000010100
但是用2进制转会成十进制 还是10404000014
可是 别人告诉我 BCD编码 改成的数据会比10404000014 短 一半

我现在就蒙了 什么是BCD编码啊
真看不懂 

下面这个是BCD的类 我就是用这个转的 我真不懂 为什么10进制的12个数 转成BCD会变成6个数 怎么变的?

C# code
class BCD    {        public enum BcdType        {            码8421,            码5421,            码2421,            余3码,            余3循环码        }        /// <summary>        /// 或BCD表数据        /// </summary>        /// <returns></returns>        private static DataTable GetBcdTable()        {            DataTable _BCDTable = new DataTable();            _BCDTable.Columns.Add("十进制数");            _BCDTable.Columns.Add("码8421");            _BCDTable.Columns.Add("码5421");            _BCDTable.Columns.Add("码2421");            _BCDTable.Columns.Add("余3码");            _BCDTable.Columns.Add("余3循环码");            _BCDTable.Rows.Add(new object[] { "0", "0000", "0000", "0000", "0011", "0010" });            _BCDTable.Rows.Add(new object[] { "1", "0001", "0001", "0001", "0100", "0110" });            _BCDTable.Rows.Add(new object[] { "2", "0010", "0010", "0010", "0101", "0111" });            _BCDTable.Rows.Add(new object[] { "3", "0011", "0011", "0011", "0110", "0101" });            _BCDTable.Rows.Add(new object[] { "4", "0100", "0100", "0100", "0111", "0100" });            _BCDTable.Rows.Add(new object[] { "5", "0101", "1000", "1011", "1000", "1100" });            _BCDTable.Rows.Add(new object[] { "6", "0110", "1001", "1100", "1001", "1101" });            _BCDTable.Rows.Add(new object[] { "7", "0111", "1010", "1101", "1010", "1111" });            _BCDTable.Rows.Add(new object[] { "8", "1000", "1011", "1110", "1011", "1110" });            _BCDTable.Rows.Add(new object[] { "9", "1001", "1100", "1111", "1100", "1010" });            return _BCDTable;        }        /// <summary>        /// BCD解码        /// </summary>        /// <param name="p_Value">BCD码</param>        /// <param name="p_BcdType">BCD码类型</param>        /// <param name="p_LongValue">返回数据</param>        /// <returns>false 解码失败 true解编成功</returns>        public static ulong GetBcdDecode(string p_Value, BcdType p_BcdType)        {            DataTable _BCDTable = GetBcdTable();          ulong  p_LongValue = 0;            StringBuilder _Return = new StringBuilder();            if (p_Value.Length % 4 == 0)            {                int _Count = p_Value.Length / 4;                string _ValueText = p_Value.ToString();                for (int i = 0; i != _Count; i++)                {                    DataRow[] _Row = _BCDTable.Select(p_BcdType.ToString() + "=" + _ValueText.Substring(i * 4, 4));                    if (_Row.Length == 0) return 0;                    _Return.Append(_Row[0]["十进制数"].ToString());                }                p_LongValue = Convert.ToUInt64(_Return.ToString());                return p_LongValue;            }            return 0;        }        /// <summary>        /// BCD编码        /// </summary>        /// <param name="p_Value">数据</param>        /// <param name="p_BcdType">编码方式</param>        /// <returns>编码 ""</returns>        public static string GetBcdEncode(ulong p_Value, BcdType p_BcdType)        {            DataTable _BCDTable = GetBcdTable();            StringBuilder _Return = new StringBuilder();            string _ValueText = p_Value.ToString();            for (int i = 0; i != _ValueText.Length; i++)            {                DataRow[] _Row = _BCDTable.Select("十进制数=" + _ValueText[i].ToString());                if (_Row.Length == 0) return "";                _Return.Append(_Row[0][p_BcdType.ToString()].ToString());            }            return _Return.ToString();    }    } 



[解决办法]
按我的理解,BCD码就是用16进制表示十进制数,
10404000014 转成 0x01,0x04,0x04,0x00,0x00,0x14

不过我没用过这么复杂的转换类


[解决办法]
http://topic.csdn.net/t/20061108/08/5141015.html
[解决办法]
探讨
我现在蒙了 BCD编码 到底是10进制转成16进制 还是 10进制转成2进制
还是 10进制转成2进制 再转成16进制
他到底是什么的东西
要是转16进制那就简单多了

[解决办法]
BCD码的说明。先科普一下
http://baike.baidu.com/view/45179.html?fromTaglist
[解决办法]
探讨
可是 人家的技术告诉我专长BCD编码后 位数会变小 要是转成2进制 位数肯定增多啊
这到底是怎么回事啊

[解决办法]
"可保存数值的精确度" 是浮点的问题了,就是小数点后的数的处理。
十进制 二进制
0.5 0.1
0.4 0.0110 0110 .....(无限循环,无法精确表达了)

[解决办法]
BCD码分压缩bcd码和非压缩bcd码,非压缩型BCD码一个字节可存放一个一位十进制数,即以8位二进制数表示1位十进制数,而非压缩bcd码是四位二进制码,非压缩bcd码比压缩bcd码短一半,不存在别人所告诉你的“BCD编码 改成的数据会比10404000014 短 一半”。
另外,10404000014 这个数转成BCD码是00010000010000000100000000000000000000010100,但用2进制转成十进制并不是10404000014,是其他的数。

热点排行