在PHP中将64位二进制字符串转换为16个字符的十六进制

时间:2018-06-21 15:28:17

标签: c# php

我有一个64个字符的长字符串,如下所示: [Remote("IsPropertyExists","DatabaseServers", AdditionalFields = "property", HttpMethod = "POST",ErrorMessage = "This Server is already in use.")] public string ServerName { get; set;a } 我需要以我认为是长度为18个字符的十六进制字符串结尾: property

当前在C#中执行此操作的代码如下:

0100101000000011111010000101010000111101000011010100010000100110

我正在尝试弄清楚如何在PHP中实现此功能,但是在php中使用084a0002d43d0d4426private string BinaryStringToHexString(string binary) { StringBuilder result = new StringBuilder(binary.Length / 8 + 1); for (int i = 0; i < binary.Length; i += 8) { string eightBits = binary.Substring(i, 8); result.AppendFormat("{0:X2}", Convert.ToByte(eightBits, 2)); } return result.ToString(); } 函数时,格式最终不会相似。 这是我目前在PHP中的尝试:

dechex

上面的php代码为我提供了binhex,它长17个字符。

这是基于几天的谷歌搜索并试图弄清楚的结果。谁能看到我要去哪里错了?

1 个答案:

答案 0 :(得分:0)

您当前拥有0100101000000011111010000101010000111101000011010100010000100110的输入字符串将被转换为4A03E8543D0D4426,您可以使用拥有的C#片段来确认这一点,或者手动进行转换。为了产生084a0002d43d0d4426,您的输入应为000010000100101000000000000000101101010000111101000011010100010000100110

话虽这么说,dechex(int $number)返回一个string,其中包含hex的{​​{1}}表示形式。可以使用bindec( string $binary_string)代替$number,它返回由dechex参数表示的二进制数的十进制等效形式。修改您的代码以使用$binary_string

bindec

输出:

<?php
    $fullStringToEncode = '000010000100101000000000000000101101010000111101000011010100010000100110';

    $result = '';
    for ($i = 0; $i < strlen($fullStringToEncode); $i = $i + 8) {
        $eightBits = substr($fullStringToEncode, $i, 8);
        $result .= sprintf('%02X', bindec($eightBits));
    }
    echo $result;
?>