问题描述:最近想把一段PHP代码改写成C#,过程中遇上把数据流写入文件,来生成图片的代码。PHP生成的图片没有问题,而C#生成的却是无效图片格式。个人怀疑是如下两个原因之一,望各位老师不吝赐教。怀疑 1. 下面的代码改写不正确
  /// <summary>
  /// 对flash内置的流编码进行解码
  /// </summary>
  private string flashdata_decode(string s)
  {
  // PHP原始代码 ///////////////////////////////////////////
  //$r = '';
  //$l = strlen($s);
  //for($i=0; $i<$l; $i=$i+2) {
  // $k1 = ord($s[$i]) - 48;
  // $k1 -= $k1 > 9 ? 7 : 0;
  // $k2 = ord($s[$i+1]) - 48;
  // $k2 -= $k2 > 9 ? 7 : 0;
  // $r .= chr($k1 << 4 | $k2);
  //}
  //return $r;
  // PHP原始代码 ///////////////////////////////////////////  // 改写后的C#代码 //////////////////////////////////////////
  string r = "";
  int k1, k2;
  for (int i = 0; i < s.Length; i = i + 2)
  {
  k1 = (char)(s[i]) - 48;
  k1 -= k1 > 9 ? 7 : 0;
  k2 = (char)(s[i + 1]) - 48;
  k2 -= k2 > 9 ? 7 : 0;
  r += Convert.ToChar(k1 << 4 | k2);
  }
  return r;
  // 改写后的C#代码 //////////////////////////////////////////  }怀疑 2:PHP与C#写文件的机制不同//PHP 原始代码:确实能生成“a1.jpg”,并且可以正常浏览
  $bigavatar = $this->flashdata_decode( $_POST['avatar1'] );
  $bigavatarfile = 'D:\test\a1.jpg';
  $fp = @fopen($bigavatarfile, 'wb');
  @fwrite($fp, $bigavatar);
  @fclose($fp);//C#改写:试了多种方法,也能生成“a1.jpg”,但却都是无效的图片文件
  string bigavatar = flashdata_decode(Request.Form["avatar1"]);
  string bigavatarfile = 'D:\test\a1.jpg';//方式1(直接写入字符串):
  File.WriteAllText(bigavatarfile, bigavatar);
//方式2(写byte):
  FileStream fs = new FileStream(bigavatarfile, FileMode.Create);
  Byte[] info = new ASCIIEncoding().GetBytes(bigavatar);
  fs.Write(info, 0, info.Length);
  fs.Flush();
  fs.Close();本人对PHP是一窍不通,完全是对照着PHP手册,按照自己的理解改写的。有什么低级错误的话,见笑。
麻烦大家帮忙看看是什么原因,在此谢过。

解决方案 »

  1.   

    C#出错的话,你应该发到C#区去问啊,PHP没有错的话,你还想了解什么呢
      

  2.   


    主要想知道fopen与fwrite的原理。另外,有能力解决我问题的只有3种人:
    1. 精通php,熟悉.net
    2. 精通.net,熟悉php
    3. 同时精通两者所以不好意思了
      

  3.   

    很明显只要精通.net的就可以解决你这个问题了
      

  4.   

    如果 s 是 string 类型
    那么在 C# 中是不可以用 
    k1 = (char)(s[i]) - 48;
    这样操作的,必须先将 s 转换成字节数组
      

  5.   

    不会.netPHP处理这种没有任何问题:一是直接读串;保险的你还是二进制打开,另写即可
      

  6.   

    数据流编码成base64传输方便些
      

  7.   

    c和php、、如果交互改的话应该很难的吧、、
      

  8.   


    你的php是发送信息,c#接送吗?
      

  9.   


    //c#忘记的差不多了http://www.dailycoding.com/Posts/convert_image_to_base64_string_and_base64_string_to_image.aspx
    //这文章希望对你有帮助