【发布时间】:2018-06-21 15:28:16
【问题描述】:
我有一个 64 个字符的长字符串,如下所示:0100101000000011111010000101010000111101000011010100010000100110
我需要以我认为是 18 个字符长的十六进制字符串结束:
084a0002d43d0d4426。
目前在 C# 中执行此操作的代码如下所示:
private 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 中是如何实现的,但是当在 php 中使用 dechex 或 binhex 函数时,格式最终不会相似。
这是我目前在 PHP 中的尝试:
$fullStringToEncode = '0100101000000011111010000101010000111101000011010100010000100110';
for ($i = 0; $i < strlen($fullStringToEncode); $i = $i + 8) {
$eightBits = substr($fullStringToEncode, $i, 8);
$result .= sprintf("%02X", dechex($eightBits));
}
上面的 php 代码给了我020282220222124a2,它有 17 个字符长。
这是基于几天的谷歌搜索并试图弄清楚的。谁能看到我哪里出错了?
【问题讨论】:
-
C 中的方法?包含不是“1”或“0”的内容的二进制字符串? 16 位字符串实际上是 72 位长?我很困惑。
-
我可能使用了错误的术语,我想我是根据 C 方法的名称来称呼它的
BinaryStringToHexString -
什么是 64 位字符串? d
-
是的,可能,但是如果你不使用正确的术语,或者至少可以翻译成有意义的东西,你就很难理解你在问什么。