BitConverter主要功能是将基础数据类型转换为一个字节数组,以及将一个字节数组转换为基础数据类型。
什么是数组?所谓数组,是有序的元素序列。 所以,字节数组就是由一些节字元素组成的集合,这个集合的名字就是数组名。例如:
byte a = 0;
byte b = 1;
byte c = 2;
byte d = 3;
byte e = 4;
byte f = 255;
byte[] array = { a, b, c, d, e, f };
我们定义了a、b、c、d、e、f一共六个byte变量,然后又定义了一个字节数组array,同时将六个变量的值放到数组中,这样array就有了6个元素,每个元素都有一个下标,而且下标总是以0开头的正整数。所以array的第一个元素的下标为0,第二个元素的下标为1,最后一个元素的下标则为5。
通过断点调试也能反映这一点。之后,我们便可以利用BitConverter进行一系列的数据类型转换。例如:
var str = BitConverter.ToString(array, 0, array.Length);
Console.WriteLine($"str = {str}");
输出结果
str = 00-01-02-03-04-FF
请注意,上图中显示的元素的数值是以十进制的形式显示的,所以分别是0,1,2,3,4,5,255,但是,使用BitConverter.ToString()方法输出来之后,显示的却是00,01,02,03,04,FF,这是为什么?这是因为它们是十六进制形式输出的。特别是最后的FF,转换成十进制,就是255。
下列表格中显示了BitConverter的转换能力。
方法成员 | 功能说明 |
BitConverter.DoubleToInt64Bits() | 将double转换成long |
BitConverter.Int64BitsToDouble() | 将long转换成double |
BitConverter.ToBoolean() | 将字节数组转换成bool |
BitConverter.ToChar() | 将字节数组指定下标处的2个字节转换成unicode字符 |
BitConverter.ToDouble() | 将字节数组指定下标处的8个字节转换成double |
BitConverter.ToInt16() | 将字节数组指定下标处的2个字节转换成short |
BitConverter.ToInt32() | 将字节数组指定下标处的4个字节转换成int |
| 将字节数组指定下标处的8个字节转换成long |
BitConverter.ToSingle() | 将字节数组指定下标处的4个字节转换成float |
BitConverter.ToString() | 将字节数组指定下标处的每个元素转换成等效的16进制形式 |
BitConverter.ToUInt16() | 将字节数组指定下标处的2个字节转换成ushort |
BitConverter.ToUInt32() | 将字节数组指定下标处的4个字节转换成uint |
| 将字节数组指定下标处的8个字节转换成ulong |
BitConverter.GetBytes() | 将基础数据类型转换成byte[]字节数组 |
使用这些方法成员时,一定要保证所引用下标存在,否则会报错。即保证数组的长度。
比如将array转换成double时,由于double需要8个字节,而array的长度为6,即只有6个字节,所以报错:System.ArgumentException:“目标数组的长度不足,无法复制集合中的所有项。请检查数组索引和长度。”
最后,我们观察下面的例子
var bool_result = BitConverter.ToBoolean(array, 1);//将第2元素转成bool
var char_result = BitConverter.ToChar(array, 0);//将第1个、第2个元素合起来转换成unicode
var float_result = BitConverter.ToSingle(array, 0);//将第1-4个元素合起来转换成float
var short_result = BitConverter.ToInt16(array, 3);//将第4个、第5个元素合起来转换成short
var int_result = BitConverter.ToInt32(array, 0);//将第1-4个元素合起来转换成int
Console.WriteLine($"bool_result = {bool_result} , type = {bool_result.GetType()}");
Console.WriteLine($"char_result = {char_result} , type = {char_result.GetType()}");
Console.WriteLine($"float_result = {float_result} , type = {float_result.GetType()}");
Console.WriteLine($"short_result = {short_result} , type = {short_result.GetType()}");
Console.WriteLine($"int_result = {int_result} , type = {int_result.GetType()}");
输出结果
bool_result = True , type = System.Boolean
char_result = ā , type = System.Char
float_result = 3.820471E-37 , type = System.Single
short_result = 1027 , type = System.Int16
int_result = 50462976 , type = System.Int32
当前课程源码下载:(注明:本站所有源代码请按标题搜索)
文件名:043-BitConverter数据转换
链接:https://pan.baidu.com/s/1Bq2lX7cruUbklLwgjGggSw
提取码:byte
——重庆教主 2024年1月23日