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数据转换_数组

通过断点调试也能反映这一点。之后,我们便可以利用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数据转换_字节数组_02

下列表格中显示了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

BitConverter.ToInt64()

将字节数组指定下标处的8个字节转换成long

BitConverter.ToSingle()

将字节数组指定下标处的4个字节转换成float

BitConverter.ToString()

将字节数组指定下标处的每个元素转换成等效的16进制形式

BitConverter.ToUInt16()

将字节数组指定下标处的2个字节转换成ushort

BitConverter.ToUInt32()

将字节数组指定下标处的4个字节转换成uint

BitConverter.ToUInt64()

将字节数组指定下标处的8个字节转换成ulong

BitConverter.GetBytes()

将基础数据类型转换成byte[]字节数组

使用这些方法成员时,一定要保证所引用下标存在,否则会报错。即保证数组的长度。

BitConverter数据转换_System_03

比如将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日