首页 > 解决方案 > 如何将 PHP pack('H40',$string); 转换为 C#?

问题描述

我正在尝试重现 PHP pack('H40',$string) 函数的结果。到目前为止,我得到了很好的结果,但略有不同。这是我尝试过的

PHP 代码

<?php
function test(){
   $packed = pack('H40',"42d5abcd859afd2cc0f6b6f8cc2a9cd41f66a120");
   return $packed;
}
echo test();
?> 

C#代码:

private void test(){
    string result = PackH40("42d5abcd859afd2cc0f6b6f8cc2a9cd41f66a120");
}
private string PackH40(string input)
{
    string result = string.Empty;
    input = input.Replace("-", " ");
    byte[] hashBytes = new byte[input.Length / 2];
    for (int i = 0; i < hashBytes.Length; i++)
    {
        hashBytes[i] = Convert.ToByte(input.Substring(i * 2, 2), 16);
    }
    return Encoding.UTF8.GetString(hashBytes);
}

结果在浏览器中看起来相似,但如果将它们写入文件,它们就不相等。到目前为止,我尝试了 C# 输出的所有编码,但什么也没有。我究竟做错了什么?

编辑:我尝试了 尝试在 C# 中重现 PHP 的 pack("H*") 函数中的方法,问题类似,在这种情况下对我没有帮助。

已解决:主要问题是我想“查看”数据并进行比较。我大错特错了!全部转换为 byte[] ,它就像一个魅力!

标签: c#php

解决方案


推荐阅读