まず、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.
}