首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数pack()返回0

函数pack()返回0
EN

Stack Overflow用户
提问于 2011-01-06 13:01:15
回答 1查看 778关注 0票数 1

为什么像pack('i',6)这样的代码可以返回0?

所有php.net都表示此函数的返回值:

返回包含数据的二进制字符串。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-06 13:38:51

你必须在这里说得更具体一点。返回类型是什么?它是一个二进制字符串,所以通常您看到的不是它实际包含的内容。

它可以以几个空字节(即value=0、\0 char)开始。由于这个字节用于表示C语言和其他语言中的字符串结束,echo和其他函数在遇到空字节时停止(有时手册说函数是“二进制安全的”,这意味着它不认为空字节为字符串结束)。

还有很多不可打印的字符。它们通常有某种特殊的含义(例如,字符7是"bell“命令,键入这个命令到您的shell中来尝试php -r 'echo "\7";')。

要找出字符串中的内容,可以将每个字符“转换”为十六进制表示形式。您可以为此使用bin2hex(),注意,它需要两个字符来表示输入字符串的一个字符。

代码语言:javascript
复制
$ 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返回零。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4615151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档