C#数组、字节数组、转换等.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE PAGE #/ 8 C#数组、字节数组、转换等 在 System 名称空间里面有许多跟 Array 操作相关的类。其中 System.Array 类里面就提供了以下常用的方法: BinarySearch: 使用二进制搜索算法在一维的排序 Array 中搜索值。 Copy: 将一个Array的一部分元素复制到另一个Array中,并根据需要执行类型强 制转换和装箱。 CopyTo: 将当前一维Array的所有元素复制到指定的一维 Array中。 Resize: 将数组的大小更改为指定的新大小。 Sort: 对一维 Array 对象中的元素进行排序。 与大多数类不同,Array提供Createlnstanee方法,以便允许后期绑定访 问,而不是提供公共构造函数。 Array.Copy方法不仅可在同一类型的数组之间复制元素,而且可在不同类型 的标准数组之间复制元素;它会自动处理强制类型转换。有些方法,如 Create In sta nee Copy、CopyTo GetValue 和 SetValue,提供重载(接受 64 位整 数作为参数),以适应大容量数组。 LongLength和GetLongLength返回指示数组 长度的64位整数。在执行需要对 Array进行排序的操作(如BinarySearch之 前,必须对 Array 进行排序。 ArrayList跟Array不同,前者是集合对象,ArrayList的ToArray方法可以直 接将ArrayList里面的全部元素导出到一个数组里,而不需用循环逐个元素地复 制到一个数组。 ToArray 的使用方法如下: ArrayList ay = new ArrayList(); ay.Add(sheep); ay.Add(cat); ay.Add(dog); string[] al= (string[])ay.ToArray(typeof(string)); Console.WriteLine(al[0]); 关键的地方在于ToArray的参数,这里应该用反射中的typeof获取arraylist 里面元素的原始数据类型。 在数组中有一种比较特殊的: 字节数组,即byte[]。内存、文件中的数据都是以字节数组的形式储存的, 如果程序需要对数据进行操作的话,或多或少都会使用到 byte[]。 对于byte[]跟其他类型的相互转换问题,在 C++中,使用Memorycopy函数 即可完成,虽然在C#里面也有类似MemoryCopy的函数: Buffer.BlockCopy,但由于强类型的特性,在 C#里它并实现不了字节数组跟 其他类型转换的功能。 为了解决这个问题,需要手工写将其他类型的数据通过位运算和逻辑运算 而得到字节数组。如下面的代码: // 整型转换为字节数组 int i = ; //对应的十六进制是: 0012D687 byte[] db = new byte[4]; //int 为 4 字节(即 32 位)的整数 db[0] = (byte)(i 0x000ff); // 取第 1,2 位 db[1] = (byte)((i 0x00ff00) 8); //取第 3,4位,并右移 2 位 db[2] = (byte)((i 0x00ff00) 16); //取第 5,6位,并右移 4 位 db[3] = (byte)((i 0xff000) 24); //取第 7,8位,并右移 6 位 Console.WriteLine(使用AND位运算和移位运算转换成数组: {0},{1},{2},{3}, db[0], db[1], db[2], db[3]);// 字节数组转换为整型 int j = 0; j = (int)db[0]; // 还原第 1 字节(低位) j += (int)db[1] 8; //还原第 2字节 j += (int)db[2] 16; //还原第 3字节 j += (int)db[3] 24; //还原第 4字节(高位) Co nsole.WriteL ine(使用移位运算还原为整数: {0}, j); 另外一个方法是使用 Marshal 来实现, Marshal 类包含了内存操作的大部分 方法,如空间的分配,指针,内存复制,内存读写等。下面用 Marshal 实现上 面同样的功能的代码: int i = ; //对应的十六进制是: 0012D687 // 使用 Marshal 转换到数组 byte[] newdb = new byte[4]; IntPtr p=Marshal.AllocHGlobal (4); // 分配内存空间,返回空间指针 Marshal.WriteInt32(p, i); // 将 int

文档评论(0)

laugh + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档