C#下16进制和BCD码转换代码

[csharp] view plain copy

  1. private static Byte[] ConvertFrom(string strTemp)
  2. {
  3. try
  4. {
  5. if (Convert.ToBoolean(strTemp.Length & 1))//数字的二进制码最后1位是1则为奇数
  6. {
  7. strTemp = "0" + strTemp;//数位为奇数时前面补0
  8. }
  9. Byte[] aryTemp = new Byte[strTemp.Length / 2];
  10. for (int i = 0; i < (strTemp.Length / 2); i++)
  11. {
  12. aryTemp[i] = (Byte)(((strTemp[i * 2] - ‘0‘) << 4) | (strTemp[i * 2 + 1] - ‘0‘));
  13. }
  14. return aryTemp;//高位在前
  15. }
  16. catch
  17. { return null; }
  18. }
  19. /// <summary>
  20. /// BCD码转换16进制(压缩BCD)
  21. /// </summary>
  22. /// <param name="strTemp"></param>
  23. /// <returns></returns>
  24. public static Byte[] ConvertFrom(string strTemp, int IntLen)
  25. {
  26. try
  27. {
  28. Byte[] Temp = ConvertFrom(strTemp.Trim());
  29. Byte[] return_Byte = new Byte[IntLen];
  30. if (IntLen != 0)
  31. {
  32. if (Temp.Length < IntLen)
  33. {
  34. for (int i = 0; i < IntLen - Temp.Length; i++)
  35. {
  36. return_Byte[i] = 0x00;
  37. }
  38. }
  39. Array.Copy(Temp, 0, return_Byte, IntLen - Temp.Length, Temp.Length);
  40. return return_Byte;
  41. }
  42. else
  43. {
  44. return Temp;
  45. }
  46. }
  47. catch
  48. { return null; }
  49. }
  50. /// <summary>
  51. /// 16进制转换BCD(解压BCD)
  52. /// </summary>
  53. /// <param name="AData"></param>
  54. /// <returns></returns>
  55. public static string ConvertTo(Byte[] AData)
  56. {
  57. try
  58. {
  59. StringBuilder sb = new StringBuilder(AData.Length * 2);
  60. foreach (Byte b in AData)
  61. {
  62. sb.Append(b >> 4);
  63. sb.Append(b & 0x0f);
  64. }
  65. return sb.ToString();
  66. }
  67. catch { return null; }
  68. }
时间: 2024-09-30 05:56:54

C#下16进制和BCD码转换代码的相关文章

支持windows linux下将指定内存段转为16进制与ascii码的日志输出类

来源:http://blog.csdn.net/lezhiyong 1. 简介 将指定内存段转为16进制与asci码的输出到日志文件的类. 2. 功能介绍 1) 支持window与linus双系统. 2) 可指定输出目录. 3) 日志能输出的时间精确到毫秒,日志能输出线程号. 4) 提供字符串输出. 5) 提供指定内存转换为16进制输出. 6) 提供指定内存转换为16进制和ascii码同时输出. 7) 可调整16进制输出间距. 3. 原理和算法 1) 模块是基于C++语言编写: 2) 通过条件定

C# 中2,10,16进制及其ASCII码之间转化

C# 中2,10,16进制及其ASCII码之间转化             --------//C#中各种字符类型的转化,使用于串口通信------------ //字符长度的理解            string s = "我是一个2兵";            int len = s.Length;//6个字符              byte[] sarr = System.Text.Encoding.Default.GetBytes(s);            len =

字符转换(2,8,10,16进制,ASCII码)

罗列了一些用到的,各进制 以及 ASCII 间的转换,记录备忘 一,先说说 2,8,10 ,16 各进制之间的转化 System.Convert类中提供了较为全面的各种类型.数值之间的转换功能: 几个比较常用的方法  1,Convert.ToInt32(string value, int fromBase)  :将字符串转换为数字(如2进制0010>也就是2^1=2)  fromBase: 顾名思义参数的进制(2,,8,10,16)     2,Convert.Tostring(int valu

太有用了,所以转:Delphi下16进制位图数据转位图

如果我们在Form中拖入一个Image控件,并设置好picture后,Alt+F12就可以看到Form的源代码中已经将图片转成了16进制字符串,如下: object Image1: TImage Left = 536 Top = 24 Width = 105 Height = 105 Picture.Data = { 07544269746D61703E040000424D3E0400000000000036000000280000000700 00002B0000000100180000000

linux shell下16进制 “\uxxxx” unicode to UTF-8中文

问题出现背景: 项目中有个通过ip获取归属地城市需求,我是直接通过新浪的ip归属查询接口来获取的.我使用的是shell脚本调用 RESULT=$(curl -s 'http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=119.137.53.145') 返回json格式的值: var remote_ip_info = {"ret":1,"start":-1,"end"

Java中byte与16进制字符串的互相转换

Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示(23 + 22 + 21 + 20 = 15),所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16进制字符H和L,并组合起来得到byte转换到16进制字符串的结果new String(H) + new String(L).即byte用十六进制表示只占2位. 同理,相反的转换也是将两个16进制字符转换成一个byte,原理同上. 根据以上原理,我们就可

Python 16进制与字符串的转换

电脑上装了Python2.7和3.3两个版本,平时运行程序包括在Eclipse里面调试都会使用2.7,但是由于某些原因在cmd命令行中输入python得到的解释器则是3.3, 一直没对此做处理,因为这样可以对两个版本的差异有一个测试,而且虚拟机里面是2.7以下的版本. 今天想到需要几个脚本做常用的编码转换,这样在没有其他工具的情况下也可以进行转换,不多说上正文: 首先是2.7版本下: 2.7版本下进行转换还是很方便的,hex2char:output = 'data'.decode('hex')

Java中byte与16进制字符串的互相转换(转)

Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示(23 + 22 + 21 + 20 = 15),所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16进制字符H和L,并组合起来得到byte转换到16进制字符串的结果new String(H) + new String(L).即byte用十六进制表示只占2位. 同理,相反的转换也是将两个16进制字符转换成一个byte,原理同上. 根据以上原理,我们就可

进制与ASCII码转换

1 LabeledEdit4.Text := chr(65); // 用十进制方式赋值: ASCII码转换为字符 65 -> A 2 LabeledEdit4.Text := #65; // 用十进制方式赋值: ASCII码转换为字符 65 -> A 3 4 LabeledEdit4.Text := #$41; //用十六进制方式赋值: ASCII码转换为字符 41 -> A 5 LabeledEdit4.Text := chr($41); //用十六进制方式赋值: ASCII码转换为字