将十六进制字符串解码为C#格式的字符串,如下面的php代码

将十六进制字符串解码为C#格式的字符串,如下面的php代码,c#,php,hex,C#,Php,Hex,我如何在c#中做完全相同的事情 它适用于支付提供商,仅提供php示例代码。根据链接: 您可以尝试使用此代码 public string ConvertToHex(string asciiString) { string hex = ""; foreach (char c in asciiString) { int tmp = c; hex += String.Format("{0:x2}", (uint)System.Convert.To

我如何在c#中做完全相同的事情

它适用于支付提供商,仅提供php示例代码。

根据链接:

您可以尝试使用此代码

public string ConvertToHex(string asciiString)
{ 
    string hex = "";
    foreach (char c in asciiString)
    {
        int tmp = c;
        hex += String.Format("{0:x2}", (uint)System.Convert.ToUInt32(tmp.ToString()));
    }
    return hex;
}

首先,我们检查PHP。我对它的理解比C#更粗糙,但它首先是将两个字符的块分解,然后将其解析为十六进制,然后从中创建一个字符,并将其添加到生成的字符中

如果我们假设字符串始终是ASCII,因此不存在编码问题,那么我们可以在C#中执行相同的操作,如下所示:

var input = "";
String.Format("{0:x2}", System.Convert.ToUInt32(input))
公共静态字符串HexToString(字符串hex)
{
var sb=new StringBuilder();//保存我们的结果;
对于(inti=0;i
或者,如果我们必须处理另一种编码,我们可以采取不同的方法。我们将使用UTF-8作为示例,但任何其他编码都会使用UTF-8(以下内容也仅适用于上述ASCII,因为它与该范围的UTF-8匹配):

公共静态字符串HexToString(字符串hex)
{
var buffer=新字节[hex.Length/2];
对于(int i=0;i<十六进制长度;i+=2)
{
字符串hexdec=十六进制子字符串(i,2);
buffer[i/2]=byte.Parse(hexdec,NumberStyles.HexNumber);
}
return Encoding.UTF8.GetString(buffer);//为了更大的灵活性,我们甚至可以传入此编码。
}

需要澄清的是,十六进制表示已经是一个字符串了。“将十六进制转换为字符串”可以更改为更合适的格式。两个函数中的第一个函数不使用字符串hexdec。这是故意的,还是应该在下一行使用?这是第一个函数中的一个输入错误,导致副本粘贴到第二个函数中。修好了,工作得很好。谢谢@JonHanna
var input = "";
String.Format("{0:x2}", System.Convert.ToUInt32(input))
public static string HexToString(string hex)
{
  var sb = new StringBuilder();//to hold our result;
  for(int i = 0; i < hex.Length; i+=2)//chunks of two - I'm just going to let an exception happen if there is an odd-length input, or any other error
  {
    string hexdec = hex.Substring(i, 2);//string of one octet in hex
    int number = int.Parse(hexdec, NumberStyles.HexNumber);//the number the hex represented
    char charToAdd = (char)number;//coerce into a character
    sb.Append(charToAdd);//add it to the string being built
  }
  return sb.ToString();//the string we built up.
}
public static string HexToString(string hex)
{
  var buffer = new byte[hex.Length / 2];
  for(int i = 0; i < hex.Length; i+=2)
  {
    string hexdec = hex.Substring(i, 2);
    buffer[i / 2] = byte.Parse(hexdec, NumberStyles.HexNumber);
  }
  return Encoding.UTF8.GetString(buffer);//we could even have passed this encoding in for greater flexibility.
}