关键字:

1.C#数据类型转换

2.short转byte

3.modbus通信解析

之前有写过modbus通信,对数据处理这块做个回顾,因为使用了第三方库,返回数据是ushort[],在这摸索一下其他的数据转换知识,modbus rtu 通信链接:http://t.csdnimg.cn/zR8Ug

下面贴出测试代码,配合注释参考:

static void Main(string[] args)

{

ushort[] data = { 30};

ushort[] data2 = { 3002 };

Console.WriteLine("Hello, World!");

byte[] b2 = new byte[] { 0x12, 0x11 };

//下面两句是判断字节数组转ushort的方法

//注意下面结果输出一致,自带反转可能是因为BitConverter.IsLittleEndian结果为true?

Console.WriteLine(BitConverter.ToInt16(b2));

Console.WriteLine(ByteArrayToReverseHexString(b2));

//下面是判断ushort数组转字节数组的方法

//ushort数组直接转字节数组

//byte最大表示到2^8,这里3002太大就会报错,小于256的数可以转换,因为Array.ConvertAll转换前后保持个数一致?

byte[] byteArray = Array.ConvertAll(data, Convert.ToByte);

//先转16进制字符串再转字节数组

var bytesByHex = HexStringToByteArray(data[0].ToString("X4"));

//查看结果是否一致

Console.WriteLine(Enumerable.SequenceEqual(byteArray, bytesByHex));

//下面是ushort与字节数组互转的方法

var bytes = ShortToByte((short)data[0]);

var sValue = ByteToShort(bytes);

}

///

/// Byte[] Reverse 2 Hex

///

///

///

public static int ByteArrayToReverseHexString(byte[] bytes)

{

if (bytes.Length > 0)

{

var byteTemp = ReverseByteArray(bytes);

//hex

var hex = BitConverter.ToString(byteTemp).Replace("-", "");

return Convert.ToInt32(hex, 16);

}

return -1;

}

///

/// 数组倒序排列

///

/// 数组参数

///

public static T[] ReverseByteArray(T[] elements)

{

if (elements.Length > 0)

{

var left = 0;

var right = elements.Length - 1;

while (left < right)

{

(elements[left], elements[right]) = (elements[right], elements[left]);

left++;

right--;

}

}

return elements;

}

///

/// Hex 2 Byte[]

///

///

///

///

public static byte[] HexStringToByteArray(string hexString)

{

try

{

if (hexString == null || hexString.Length % 2 != 0)

{

throw new ArgumentException("无效的16进制字符串");

}

byte[] bytes = new byte[hexString.Length / 2];

for (int i = 0; i < hexString.Length; i += 2)

{

bytes[i / 2] = Convert.ToByte(hexString.Substring(i, 2), 16);

}

return bytes;

}

catch (Exception e)

{

return null;

}

}

///

/// Short2Byte

///

///

///

public static byte[] ShortToByte(short value)

{

return BitConverter.GetBytes(value);

}

///

/// Byte2Short

///

///

///

public static short ByteToShort(byte[] arr)

{

return BitConverter.ToInt16(arr, 0);

}

推荐阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。