C#实现BCD码
来源:互联网 发布:华钦软件 编辑:程序博客网 时间:2024/05/01 18:18
string _BcdText = Zgke.ConvertByte.BCD.GetBcdEncode(123456, Zgke.ConvertByte.BCD.BcdType.码8421);
ulong _Value;
if(Zgke.ConvertByte.BCD.GetBcdDecode(_BcdText,Zgke.ConvertByte.BCD.BcdType.码8421,out _Value))
{
MessageBox.Show(_Value.ToString(), _BcdText);
}
全部类
1. using System;
2. using System.Collections.Generic;
3. using System.Text;
4. using System.Data;
5.
6. namespace Zgke.ConvertByte
7. {
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();
}
}
- C#实现BCD码
- C#实现BCD码
- BCD码转换 .net C# BCD 码转换
- C# int to BCD encode(最简单的实现办法)
- COP2000实现BCD码的加法
- BCD码转十进制C语言实现
- BCD码
- bcd码
- BCD码
- BCD码
- BCD码
- BCD码
- BCD码
- BCD 码
- BCD码
- BCD码
- BCD码
- BCD码
- USACO算法系列四十——frameup
- a a a
- 网游多线程模型
- android adapter 深刻分析
- Linux vsftpd
- C#实现BCD码
- 几种排序_java
- eclipse 下遇到的一些问题
- 使用异步方式调用同步方法
- SQLite随机取n行数据
- 发现库文件包含进去了,但总是找不到文件时,看看是不是路径里有空格
- Windows下perl之hello world
- 将现有Ubuntu系统做成LiveCD
- 新手上路