为什么像pack('i',6)这样的代码可以返回0?
所有php.net都表示此函数的返回值:
返回包含数据的二进制字符串。
发布于 2011-01-06 13:38:51
你必须在这里说得更具体一点。返回类型是什么?它是一个二进制字符串,所以通常您看到的不是它实际包含的内容。
它可以以几个空字节(即value=0、\0 char)开始。由于这个字节用于表示C语言和其他语言中的字符串结束,echo和其他函数在遇到空字节时停止(有时手册说函数是“二进制安全的”,这意味着它不认为空字节为字符串结束)。
还有很多不可打印的字符。它们通常有某种特殊的含义(例如,字符7是"bell“命令,键入这个命令到您的shell中来尝试php -r 'echo "\7";')。
要找出字符串中的内容,可以将每个字符“转换”为十六进制表示形式。您可以为此使用bin2hex(),注意,它需要两个字符来表示输入字符串的一个字符。
$ php -r 'var_dump(bin2hex(pack("i",6)));'
string(8) "06000000"(上面看到的输出取决于硬件。)在我的例子中,pack('i', 6);以小endian格式返回整数,因为我有一个英特尔处理器。
您可以看到第一个字符(06)的小数值为6,然后您通常会查找这个字符属于哪个字符。在许多情况下,使用ASCII表是可以的,但是请注意,如果您使用unicode或任何其他编码,那么某些字符可能有另一个含义。根据我的ASCII表,它是字符。这是一个不可打印的字符,它只具有控制功能。
需要解释的是,为什么这会转换为整数0。幸运的是,这很容易。阅读将字符串转换为数字上的PHP手册页面。
如果字符串以有效的数字数据开头,这将是使用的值。否则,该值将为0(零)。
因为\6字符既不是符号也不是数字(字符0-9是十进制的\48-\57或\0x30-\0x39十六进制),所以PHP返回零。
https://stackoverflow.com/questions/4615151
复制相似问题