都是用类BitConverter完成,该类定义了一组静态函数实现双向转换,位于System下。
这里涉及双向转换问题和大小端转换的问题。
(1)float、int等类型转bytes数组
使用:GetBytes。
可以将常见的各种数据类型转换为byte数组。
参见: BitConverter.GetBytes Method
例如:
float fvalue = 1.02;
byte[] bytes = BitConverter.GetBytes(fvalue);
(2) 数组向各种类型转换
使用:ToXXX系列函数完成转换。ToXXX(Byte[] bytes,Int32 startIndex)
其中第一个参数为输入的字节数组,第二个参数为该数组中的字节偏移。
常见的有:
ToBoolean(Byte[], Int32)
返回由字节数组中指定位置的一个字节转换来的布尔值。
ToChar(Byte[], Int32)
返回由字节数组中指定位置的两个字节转换来的 Unicode 字符。
ToDouble(Byte[], Int32)
返回由字节数组中指定位置的八个字节转换来的双精度浮点数。
ToInt16(Byte[], Int32)
返回由字节数组中指定位置的两个字节转换来的 16 位有符号整数。
ToInt32(Byte[], Int32)
返回由字节数组中指定位置的四个字节转换来的 32 位有符号整数。
ToInt64(Byte[], Int32)
返回由字节数组中指定位置的八个字节转换来的 64 位有符号整数。
ToSingle(Byte[], Int32)
返回由字节数组中指定位置的四个字节转换来的单精度浮点数。
ToString(Byte[])
将指定的字节数组的每个元素的数值转换为它的等效十六进制字符串表示形式。
ToString(Byte[], Int32)
将指定的字节子数组的每个元素的数值转换为它的等效十六进制字符串表示形式。
ToString(Byte[], Int32, Int32)
将指定的字节子数组的每个元素的数值转换为它的等效十六进制字符串表示形式。
ToUInt16(Byte[], Int32)
返回由字节数组中指定位置的两个字节转换来的 16 位无符号整数。
ToUInt32(Byte[], Int32)
返回由字节数组中指定位置的四个字节转换来的 32 位无符号整数。
ToUInt64(Byte[], Int32)
返回由字节数组中指定位置的八个字节转换来的 64 位无符号整数。
具体参见:BitConverter Class
(3) 关于大小端转换与反序。
注意:该函数的转换中涉及大小端的问题,具体的字节顺序依赖与所在计算机本身的大小端!!
所以,如果处理的是来自网络或串口的数据,一定要注意是否跟本地计算机的一样!
一般x86系列的计算机都是小端的,即高字节在低位,低字节在高位。例如整数:0x12345678。小端存储的结果为:0x78563412。
那么如何转序呢?有以下几种方法:
(a)使用Array.Reverse方法。
Reverse(Array, Int32, Int32)
反转一维 Array 中某部分元素的元素顺序。分别为从某一个起始的,长度。
Reverse(Array)
反转整个一维 Array 中元素的顺序。
(b)对于整型可以使用这个转换函数:这里只能针对整型的!
(i)网络序转本机序
NetworkToHostOrder(Int32)
将整数值由网络字节顺序转换为主机字节顺序。
NetworkToHostOrder(Int64)
将长值由网络字节顺序转换为主机字节顺序。
NetworkToHostOrder(Int16)
将短值由网络字节顺序转换为主机字节顺序。
(ii)本机序转网络序
IPAddress.HostToNetworkOrder Method
HostToNetworkOrder(Int16)
将短值由主机字节顺序转换为网络字节顺序。
HostToNetworkOrder(Int32)
将整数值由主机字节顺序转换为网络字节顺序。
HostToNetworkOrder(Int64)
将长值由主机字节顺序转换为网络字节顺序。