|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
|
using System.Runtime.InteropServices;
|
|
|
using System.Text;
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
namespace HighWayIot.Common
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// 工具类
|
|
|
/// </summary>
|
|
|
public sealed class MsgUtil
|
|
|
{
|
|
|
|
|
|
private static readonly Lazy<MsgUtil> lazy = new Lazy<MsgUtil>(() => new MsgUtil());
|
|
|
|
|
|
public static MsgUtil Instance
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
return lazy.Value;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private MsgUtil() { }
|
|
|
|
|
|
|
|
|
public byte[] HexStrTorbytes(string strHex)//e.g. " 01 01" ---> { 0x01, 0x01}
|
|
|
{
|
|
|
strHex = strHex.Replace(" ", "");
|
|
|
if ((strHex.Length % 2) != 0)
|
|
|
strHex += " ";
|
|
|
byte[] returnBytes = new byte[strHex.Length / 2];
|
|
|
for (int i = 0; i < returnBytes.Length; i++)
|
|
|
returnBytes[i] = Convert.ToByte(strHex.Substring(i * 2, 2), 16);
|
|
|
return returnBytes;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 将字符串强制转换成int,转换失败则返回0
|
|
|
/// </summary>
|
|
|
/// <param name="str"></param>
|
|
|
/// <returns></returns>
|
|
|
public int ParseToInt(string str)
|
|
|
{
|
|
|
int returnInt = 0;
|
|
|
|
|
|
if (str == null || str.Trim().Length < 1)
|
|
|
{
|
|
|
return returnInt;
|
|
|
}
|
|
|
|
|
|
if (int.TryParse(str, out returnInt))
|
|
|
{
|
|
|
return returnInt;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
return 0;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public byte[] HexToString(string Str)
|
|
|
{
|
|
|
byte[] str = new byte[Str.Length / 2];
|
|
|
for (int i = 0; i < str.Length; i++)
|
|
|
{
|
|
|
int temp = Convert.ToInt32(Str.Substring(i * 2, 2), 16);
|
|
|
str[i] = (byte)temp;
|
|
|
}
|
|
|
return str;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// byte数组转换成十六进制字符串
|
|
|
/// </summary>
|
|
|
/// <param name="bytes"></param>
|
|
|
/// <param name="iLen"></param>
|
|
|
/// <returns></returns>
|
|
|
public string bytesToHexStr(byte[] bytes, int iLen)
|
|
|
{
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
if (bytes != null)
|
|
|
{
|
|
|
for (int i = 0; i < iLen; i++)
|
|
|
{
|
|
|
sb.Append(bytes[i].ToString("X2") + " ");
|
|
|
}
|
|
|
}
|
|
|
return sb.ToString();
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 从十进制转换到十六进制
|
|
|
/// </summary>
|
|
|
/// <param name="ten"></param>
|
|
|
/// <returns></returns>
|
|
|
public string Ten2Hex(string ten)
|
|
|
{
|
|
|
ulong tenValue = Convert.ToUInt64(ten);
|
|
|
ulong divValue, resValue;
|
|
|
string hex = "";
|
|
|
do
|
|
|
{
|
|
|
//divValue = (ulong)Math.Floor(tenValue / 16);
|
|
|
|
|
|
divValue = (ulong)Math.Floor((decimal)(tenValue / 16));
|
|
|
|
|
|
resValue = tenValue % 16;
|
|
|
hex = tenValue2Char(resValue) + hex;
|
|
|
tenValue = divValue;
|
|
|
}
|
|
|
while (tenValue >= 16);
|
|
|
if (tenValue != 0)
|
|
|
hex = tenValue2Char(tenValue) + hex;
|
|
|
return hex;
|
|
|
}
|
|
|
|
|
|
public static string tenValue2Char(ulong ten)
|
|
|
{
|
|
|
switch (ten)
|
|
|
{
|
|
|
case 0:
|
|
|
case 1:
|
|
|
case 2:
|
|
|
case 3:
|
|
|
case 4:
|
|
|
case 5:
|
|
|
case 6:
|
|
|
case 7:
|
|
|
case 8:
|
|
|
case 9:
|
|
|
return ten.ToString();
|
|
|
case 10:
|
|
|
return "A";
|
|
|
case 11:
|
|
|
return "B";
|
|
|
case 12:
|
|
|
return "C";
|
|
|
case 13:
|
|
|
return "D";
|
|
|
case 14:
|
|
|
return "E";
|
|
|
case 15:
|
|
|
return "F";
|
|
|
default:
|
|
|
return "";
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|