彩票走势图

解决了C#中字节数组与字符串来回转换的问题

转帖|其它|编辑:郝浩|2011-08-17 15:14:41.000|阅读 1580 次

概述:在C#中字节数组与字符串的来回转换会遇到一个奇怪的问题.这个问题是在做网络传送文件时遇到的本文主要解决了C#中字节数组与字符串来回转换的问题。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

  在C#中字节数组与字符串的来回转换会遇到一个奇怪的问题.这个问题是在做网络传送文件时遇到的.

  问题如下:

  就是把件流形成的字节数组转成字符串发送,对端接收到过后把字符串还原成字节数组然后形成文件流.

  这个时候在对端总是发现接收到字节数组长度和发送的长度不一致.于是就做了如下代码进行测试.

  using System;

  using System.Collections.Generic;

  using System.Linq;

  using System.Text;

  using System.IO;

  namespace ByteTest

  {

  class Program

  {

  static void Main(string[] args)

  {

  int arraysize = 62000;   //设置数组大小

  FileInfo transfile = new FileInfo(@"D:\\dlap_old.dmp");//随便找一个大于arraysize的文件

  FileStream fs = new FileStream(transfile.FullName, FileMode.Open);

  BinaryReader fileReader = new BinaryReader(fs, Encoding.Unicode);

  byte[] bytedata = new byte[arraysize];

  fileReader.Read(bytedata, 0, bytedata.Length);

  string temp = Encoding.Unicode.GetString(bytedata);  //先将字节数组转换成字符串

  byte[] test = Encoding.Unicode.GetBytes(temp);    //再将字符串转换成字节数组

  //比较转换前后的字节数组bytedata 和test 的差异

  if (bytedata.Length == test.Length)

  {

  for (int k = 0; k < arraysize; k++)

  {

  if (bytedata[k] != test[k])

  Console.WriteLine(&quot;位置" + k.ToString() + "存在不一致结果" );

  }

  Console.WriteLine( "转换检查完成,数组长度一致");

  }

  else

  {

  Console.WriteLine( "转换后数组长度不相等");

  }

  Console.ReadKey();

  }

  }

  }

  运行上面的结果很容易看到字节数组经过字符串转换后再转换回来后就已经不是原来的字节数组了,有很多地方会不一致.

  如果将编码方式Encoding.Unicode 改成Encoding.Default后会发现两个数组的长度都不一致.

  其他的编码方式也进行了测试,其结果不是数组长度不一致就是其内容不一致.

  后来在网上找到下面一种转换方法,终于经过转换后得到了同样的字节数组

  using System;

  using System.Collections.Generic;

  using System.Linq;

  using System.Text;

  using System.IO;

  namespace ByteTest

  {

  class Program

  {

  static void Main(string[] args)

  {

  int arraysize = 62000;   //设置数组大小

  FileInfo transfile = new FileInfo(@"D:\\dlap_old.dmp");//随便找一个大于arraysize的文件

  FileStream fs = new FileStream(transfile.FullName, FileMode.Open);

  BinaryReader filereader = new BinaryReader(fs);

  byte[] bytedata = filereader.ReadBytes(arraysize);

  StringBuilder strb = new StringBuilder();

  strb.Append(Convert.ToBase64String(bytedata));

  string temp = strb.ToString();

  byte[] test = Convert.FromBase64String(temp);

  if (bytedata.Length == test.Length)

  {

  for (int k = 0; k < arraysize; k++)

  {

  if (bytedata[k] != test[k])

  Console.WriteLine("位置" + k.ToString() + "存在不一致结果&quot; );

  }

  Console.WriteLine( "转换检查完成,数组长度一致");

  }

  else

  {

  Console.WriteLine( "转换后数组长度不相等");

  }

  Console.ReadKey();

  }

  }

  }

  至于最终原因因为才学习C#不久,水平有限,未能进一步研究,只是猜测可能是字节编码经过转换成字符串的过程中会有两个字节的形成一个字符编码,有个别字符编码在逆向转换成字节时没有对应的字节编码,所以产生了错误.


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:网络转载

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP