【问题标题】:Searching equivalent for PHP functions搜索等效的 PHP 函数
【发布时间】:2012-06-04 02:21:42
【问题描述】:

我将整数转换为字符串格式时遇到了一些问题。我得到了这些 PHP 函数,这正是我在 C# 中所需要的:

function _hex($int)
{
    return (strlen(sprintf("%X", $int)) % 2 == 0) ? sprintf("%X", $int) : sprintf("0%X",     $int);
}
Function hex2str($hexstr)
{
    $hexstr = str_replace(' ', '', $hexstr);
    $hexstr = str_replace('\x', '', $hexstr);
    $retstr = pack('H*', $hexstr);
    return $retstr;
}

他们被这样称呼:

$total_length = hex2str(_hex(strlen($content)));

在 C# 中我试过这个:

String test = "1234567890123456789012345678901234567890123456789";
short l = (short)test.Length;
byte[] TotalLength = Encoding.GetEncoding(28591).GetBytes(l.ToString());

PHP HexDump 的结果是 00 3C - 在 C# 中我得到 34 39

我希望结果是这种格式的字符串:

\x00\x3c

您好, 莫里茨

【问题讨论】:

    标签: c# function hex ascii


    【解决方案1】:

    根据您的示例代码,值 34/39 是输出字节的正确格式的十六进制数字,所以我不确定您是如何得出 00/3C 的。

    但是,在 C# 中将数值转换为十六进制字符串,请使用;

    string hex = String.Format("{0:X}", number);
    

    或者在您更具体的情况下;

    StringBuilder sb = new StringBuilder();
    foreach (byte b in TotalLength)
    {
        sb.Append(String.Format("\x{0:X}", b));
    }
    string hex = sb.ToString();
    

    【讨论】:

    • 请查看我的评论@Carstens 的回答。
    • 如果您的输入值为 60,那么这将生成字符串 '\x3c',但是我看不到您如何从示例代码中得到 60。
    • 是的,这正是我所需要的,但我需要将 \x00\x32 值作为字符串,这样我就可以将其转换为并使用套接字发送。
    【解决方案2】:

    您的代码返回转换为字符串的 l 值的 ASCII 值(ASCII 34/39 为 49 - 您的字符串的长度)。但是你需要的是长度值的 byte[] 表示。

    换行

    byte[] TotalLength = Encoding.GetEncoding(28591).GetBytes(l.ToString());
    

    byte[] TotalLength = BitConverter.GetBytes(l);
    

    请注意,在英特尔 CPU 上,值 15 会转换为 0F-00 而不是 00-0F。高字节在先。当您将字节数组转换为字符串时,您必须注意这一点。

    要将字节值转换为十六进制字符串,请使用

    var sb = new StringBuilder();
    for (int i = TotalLength.Length - 1; i >= 0; i--)
    {
        sb.Append("\\x");
        sb.Append(TotalLength[i].ToString("x2"));
    }
    string hex = sb.ToString();
    

    P.S.:局部变量应该以小写字符开头。

    【讨论】:

    • 嘿,谢谢你的帮助,它几乎就是我需要的。我认为最好是访问这个站点:easycalculation.com/hex-converter.php 并输入 003c 作为十六进制值。 Deciaml 是 60,这正是我需要的,但反过来了。我想给出一个 int 并得到上面那样的十六进制值。
    猜你喜欢
    • 1970-01-01
    • 2013-06-22
    • 2012-03-29
    • 2010-11-07
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多