【问题标题】:Convert bytes to binary将字节转换为二进制
【发布时间】:2017-11-22 19:11:18
【问题描述】:

我正在使用这个功能https://php.net/random_bytes 我会将此随机字节转换为二进制视图。

我尝试将其转换为 hex2bin,然后我使用函数 pack 将其转换为二进制文件,但它不起作用。

如何将随机字节转换为二进制?

【问题讨论】:

  • 我猜random_bytes 返回一个二进制字符串。你可以使用bin2hex() 代替显示十六进制值

标签: php random binary byte


【解决方案1】:

random_bytes 返回二进制数据,但不是可读格式。如果您想将其实际表示为 1 和 0 的字符串,您需要首先使用 PHP 的 bin2* 函数之一将其转换,然后使用 base_convert 将其转换回来:

<?php
function random_binary($bytes) {
  return base_convert(bin2hex(random_bytes($bytes)), 16, 2);
}

echo random_binary(1);

// 10000011

这只能达到系统的整数限制(在 64 位系统上可能为 2^63-1)。如果您安装了 GMP 扩展,您可以使用以下任意精度:

<?php
function random_binary($bytes) {
  $hex = bin2hex(random_bytes($bytes));
  return gmp_strval(gmp_init($hex, 16), 2);
}

echo random_binary(40);

// 10000000101110000010011111001011011100111110...

【讨论】:

  • 为什么有时二进制只有 0 ?字符串(40)“e1b813b168a91d6bffd1022c7c998e7ace328240”字符串(64)“00000000000000000000000000000000000000000000000000000000000000000”
  • 那是因为浮点精度,base_convert的文档中的警告:php.net/base_convert
  • base_convert 只能在系统的整数限制范围内工作,因此可能不到 8 个字节 (2^63 - 1)。我添加了另一个解决方案,尽管它依赖于 GMP 扩展。
猜你喜欢
  • 2013-03-06
  • 1970-01-01
  • 2021-12-05
  • 2012-07-16
  • 2018-11-02
  • 1970-01-01
  • 2022-12-09
  • 2021-12-20
  • 2013-07-17
相关资源
最近更新 更多