【发布时间】:2015-04-24 00:05:32
【问题描述】:
我正在将一个用 PHP 编写的加密库转换为 C#,并且有一个小问题。在 PHP 中将 HEX 字符串转换为字符串时,我得到一个不同的值,然后我的 C# 代码应该做同样的事情。
这是我正在使用的 php 代码:
public function hex2str($hex)
{
$str = '';
for($i=0; $i<strlen($hex); $i+=2)
{
$str.=chr(hexdec(substr($hex, $i, 2)));
}
return $str;
}
还有我的 C# 代码:
public static string Hex2Str(string hexString)
{
char[] mychar = new char[hexString.Length / 2];
for (var i = 0; i < mychar.Length; i++)
{
// Convert the number expressed in base-16 to an integer.
int value = Convert.ToInt32(hexString.Substring(i * 2, 2), 16);
string stringValue = Char.ConvertFromUtf32(value);
mychar[i] = (char)value;
}
return new String(mychar);
}
我使用的十六进制值是:
E0D644FCDEB4CCA04D51F617D59084D8
下面是PHP脚本和我的C#脚本返回值的区别图片:
如果有人能帮我找出我在 C# 代码中的错误,我将不胜感激!
【问题讨论】:
-
您链接的重复帖子都是关于 php 代码以及在十六进制和字符串之间来回转换...我的问题与 C# 严格相关,并试图以一种方式模仿我的 PHP 代码转换到一个字符串。
-
我不好,我累了,对不起
-
如何将 PHP 字符串导入 c# 进行打印? 'α' 的十六进制值是
3B1,所以它不可能用两个字节的值来表示。E0的值为 224,这恰好是 'α' 的“OEM United States”编码——也许你错误地解码了 PHP 字符串? -
我基本上在一个新进程中运行 php 并像这样捕获输出:pastebin.com/d1qxinvj