1
// This function converts from a hexadecimal representation to a string representation.
function hextostr($hex) {
  $string = "";
  foreach (explode("\n", trim(chunk_split($hex, 2))) as $h) {
    $string .= chr(hexdec($h));
  }

 return $string;
 }

C#でまったく同じことを行うにはどうすればよいですか?

これは、PHP のサンプル コードのみを提供する支払いプロバイダー向けです。

4

3 に答える 3

2

まず、PHP を調べます。私はC#よりも錆びていますが、最初に2文字のチャンクを分割し、次にそれを16進数として解析し、それから文字を作成し、生成されたものに追加します.

文字列が常に ASCII であり、したがってエンコードの問題がないと仮定する場合、次のように C# で同じことを行うことができます。

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.
}

あるいは、別のエンコーディングに対処する必要がある場合は、別のアプローチを取ることができます。例として UTF-8 を使用しますが、他のエンコーディングにも従います (以下は、その範囲の UTF-8 に一致するため、上記の ASCII のみのケースでも機能します)。

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.
}
于 2012-08-29T20:43:34.007 に答える
0

このリンクによると:

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;
}
于 2012-08-29T20:17:42.117 に答える
0

このコードで試してください

var input = "";
String.Format("{0:x2}", System.Convert.ToUInt32(input))
于 2012-08-29T20:19:03.770 に答える