如:ABC123abc <==> 414243313233616263 //“A”的十六进制ascii码为“41”,依此类推以下代码太慢了:
/// <summary>
/// 字符串 转为 16进制格式
/// </summary>
public static string StrToHexStr(string s)
{
    string s2 = "";
    for (int i = 0; i < s.Length; i++)
    {
        string sTmp = Convert.ToString(s[i], 16);
        if (sTmp.Length == 1)
        {
            sTmp = "0" + sTmp;
        }
        s2 += sTmp;
    }
    return s2;
}/// <summary>
/// 16进制格式 转回 字符串
/// </summary>
public static string HexStrToStr(string s)
{
    string s2 = "";
    for (int i = 0; i < s.Length; i += 2)
    {
        string ss = s[i].ToString() + s[i + 1].ToString();
        int n = Convert.ToInt32(ss, 16);
        s2 += (char)n;
    }
    return s2;
}

解决方案 »

  1.   

    主要是想把bin形式的dat文件读到字符串中,并转为文本格式的编码。
    本可以用Base64编码,但可能会出现 不同开发环境不同编码表 会出现不同结果,
    为了能让delphi7与C#的编码能统一,所以用16进制格式。delphi7的很快,有自带的 BinToHex函数:
    //字符串转换成16进制字符串
    function StrToHexStr(s:string):string;
    begin
      SetLength(Result, length(s)*2);
      BinToHex(@s[1], PAnsiChar(Result), length(s));
    end;//16进制字符串转换成字符串
    function HexStrToStr(s:string):string;
    var
      ms:TMemoryStream;
    begin
      ms:=TMemoryStream.Create;
      ms.SetSize(Length(s)div 2);
      HexToBin(pchar(s), ms.Memory, ms.Size);
      s:=MemoryStreamToStr(ms);
      result:=s;
    end;
      

  2.   

    string s = "ABC123abc";
    string t = "";
    foreach (char c in s)  t += ((Int16)c).ToString("X2");
    Console.WriteLine(t);
      

  3.   

    @Hassle, 你写的是编码,那解码的怎么写?刚试着改用StringBuilder可以快很多:
    /// <summary>
    /// 字符串 转为 16进制格式
    /// </summary>
    public static string StrToHexStr(string s)
    {
        StringBuilder sb = new StringBuilder();
        foreach (char c in s)
        {
            //err sb.AppendFormat("{0:D2}", c);
            //err sb.AppendFormat("{0:X2}", c); //如果这行可行的话,还能快一点
            string sTmp = ((Int16)c).ToString("X2");
            if (sTmp.Length == 1) sTmp = "0" + sTmp;
            sb.Append(sTmp);
        }
        return sb.ToString();
    }
      

  4.   


    static string GetHexString(string src)
    {
        return String.Join("", src.Select(ch => ((int)ch).ToString("X2")));
    }
      

  5.   

    整这个东东的主要目的就是:
    delphi7做成的dll参数必需是与 WindowsAPI 接轨的PChar类型,即以 "0x0" 结尾的字符串。
    一个bin格式的dat文件的字节可能是 0x00~0xFF 之间任意值,包含了 0x00,PChar遇到0x0就结束了。
    不得已才用 Base64编码 或 HexStr编码。
    HexStr的长度是原字符串的两倍,base64的结果虽然精简,但选用不同的编码表可能会得到不同的结果,为了保险起见还是用HexStr。如果大家有更好的方法 让C#调用动态连接库的函数 不需要转换参数 那更好。
      

  6.   

    @Hassle, 你写的是编码,那解码的怎么写?
    @youzelin, (同上)。编码是一个字节对应两个字符,解码的是两个字符对应一个字节,相对来讲复杂一些。
      

  7.   

    看看这个整理文档:         string和byte[]的转换 (C#)