C# webform我现在image类型字段的数据为“0x0100000EA0100....”现在我想把它取出来付给string类型的变量str,或一个EDIT.
比如结果是: edit1.text:='0x0100000EA0100';或 str='0x0100000EA0100';请问要如何做,能否给个例子

解决方案 »

  1.   

    SqlDataReader dr;
    string str = System.Text.Encoding.Default.GetString ((bytre)dr["photo"]);
      

  2.   

    可以出现如下2个错误:
    与“System.Text.Encoding.GetString(byte[])”最匹配的重载方法具有一些无效参数 参数“1”: 无法从“byte”转换为“byte[]”
      

  3.   

    string str = System.Text.Encoding.Default.GetString ((byte[])dr["photo"]);
      

  4.   

    运行出来后不是我要的结果str = "\0\0\0\0\0\0\0\0\0\0\0\0`?\0`?\0\0\0\0\0\0\0\0\0?\0\0\0\0\0\0\0\0\0\0\0?\0\0\0\0\0\0\0\0\0\n\0\0\0>\0>\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\..."我想要的是
    edit1.text:='0x0100000EA0100';或 str='0x0100000EA0100';
      

  5.   

    应该这样
    string str = System.Text.Encoding.Default.GetString ((byte[])dr["photo"]);
      

  6.   

    string str = System.Text.Encoding.Default.GetString ((byte[])dr["photo"]);
    上面代码出来的结果是
    str = "\0\0\0\0\0\0\0\0\0\0\0\0`?\0`?\0\0\0\0\0\0\0\0\0?\0\0\0\0\0\0\0\0\0\0\0?\0\0\0\0\0\0\0\0\0\n\0\0\0>\0>\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\..."我想要的是
    edit1.text:='0x0100000EA0100';或 str='0x0100000EA0100';
      

  7.   

    编码的问题,你把Default换成其他方式,UniCode或UTF-8等编码方式
      

  8.   

    先转换成byte[]试试吧 byte[] b = (byte[])dr["photo"]
      

  9.   

    谢谢 hitlcyu19  已解决了
    不过换成byte[]后里面的字符是十进制的,我只能用for循环对每个十进制分别转成十六进制,
     str=Convert.ToString(b[i], 16); 可是如果b[i]=1 转出来后的str也为1,我想得到的是01,2位的,有什么好办法解决吗,我目前是通过判断str的长度,不足2位前面补0解决的,不知有没有一步到位的好办法?
      

  10.   

    StringBuilder  sb= new StringBuilder();
    for(int i=0;i<b.Length;i++)
    {
    sb.AppendFormat("{0:X2}", b[i]);
    }
    string str=sb.ToString();
      

  11.   

    sb.AppendFormat("{0:X2}", b[i]);
    这句把字节转16进制,并把不够两位的前面自动补0