c#数组、字节数组、转换等

c#数组、字节数组、转换等

ID:34707732

大小:51.78 KB

页数:4页

时间:2019-03-09

c#数组、字节数组、转换等_第1页
c#数组、字节数组、转换等_第2页
c#数组、字节数组、转换等_第3页
c#数组、字节数组、转换等_第4页
资源描述:

《c#数组、字节数组、转换等》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、C#数组、字节数组、转换等在System名称空间里面有许多跟Array操作相关的类。其中System.Array类里面就提供了以下常用的方法:BinarySearch:使用二进制搜索算法在一维的排序Array中搜索值。Copy:将一个Array的一部分元素复制到另一个Array中,并根据需要执行类型强制转换和装箱。CopyTo:将当前一维Array的所有元素复制到指定的一维Array中。Resize:将数组的大小更改为指定的新大小。Sort:对一维Array对象中的元素进行排序。与大多数类不同,Array提供CreateInstance方法,以便允许后期绑

2、定访问,而不是提供公共构造函数。Array.Copy方法不仅可在同一类型的数组之间复制元素,而且可在不同类型的标准数组之间复制元素;它会自动处理强制类型转换。有些方法,如CreateInstance、Copy、CopyTo、GetValue和SetValue,提供重载(接受64位整数作为参数),以适应大容量数组。LongLength和GetLongLength返回指示数组长度的64位整数。在执行需要对Array进行排序的操作(如BinarySearch)之前,必须对Array进行排序。ArrayList跟Array不同,前者是集合对象,ArrayList的

3、ToArray方法可以直接将ArrayList里面的全部元素导出到一个数组里,而不需用循环逐个逐个元素地复制到一个数组。ToArray的使用方法如下:ArrayListay=newArrayList();ay.Add("sheep");ay.Add("cat");ay.Add("dog");string[]al=(string[])ay.ToArray(typeof(string));Console.WriteLine(al[0]);关键的地方在于ToArray的参数,这里应该用反射中的typeof获取arraylist里面元素的原始数据类型。在数组中有一

4、种比较特殊的:字节数组,即byte[]。内存、文件中的数据都是以字节数组的形式储存的,如果程序需要对数据进行操作的话,或多或少都会使用到byte[]。对于byte[]跟其他类型的相互转换问题,在C++中,使用Memorycopy函数即可完成,虽然在C#里面也有类似MemoryCopy的函数:Buffer.BlockCopy,但由于强类型的特性,在C#里它并实现不了字节数组跟其他类型转换的功能。为了解决这个问题,需要手工写将其他类型的数据通过位运算和逻辑运算而得到字节数组。如下面的代码://整型转换为字节数组inti=1234567;//对应的十六进制是:0

5、012D687byte[]db=newbyte[4];//int为4字节(即32位)的整数db[0]=(byte)(i&0x000000ff);//取第1,2位db[1]=(byte)((i&0x0000ff00)>>8);//取第3,4位,并右移2位db[2]=(byte)((i&0x00ff0000)>>16);//取第5,6位,并右移4位db[3]=(byte)((i&0xff000000)>>24);//取第7,8位,并右移6位Console.WriteLine("使用AND位运算和移位运算转换成数组:{0},{1},{2},{3}",db[0],

6、db[1],db[2],db[3]);//字节数组转换为整型intj=0;j=(int)db[0];//还原第1字节(低位)j+=(int)db[1]<<8;//还原第2字节j+=(int)db[2]<<16;//还原第3字节j+=(int)db[3]<<24;//还原第4字节(高位)Console.WriteLine("使用移位运算还原为整数:{0}",j);另外一个方法是使用Marshal来实现,Marshal类包含了内存操作的大部分方法,如空间的分配,指针,内存复制,内存读写等。下面用Marshal实现上面同样的功能的代码:inti=1234567;

7、//对应的十六进制是:0012D687//使用Marshal转换到数组byte[]newdb=newbyte[4];IntPtrp=Marshal.AllocHGlobal(4);//分配内存空间,返回空间指针Marshal.WriteInt32(p,i);//将int的值写到该空间Marshal.Copy(p,newdb,0,4);//将内存空间的内容复制到字节数组newdb,各参数的含义source,destination,startindex,lengthConsole.WriteLine("使用Marshal转换整数为数组:{0},{1},{2},

8、{3}",newdb[0],newdb[1],newdb[2],n

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。