我正在寻找使用 unpack()。
这有效:
$srbytes = "\x80\x3e\x00\x00";
$array1 = unpack("v",$srbytes);
这不会:
$num1 = "80"
$srbytes = "\x".$num1."\x3e\x00\x00";
$array1 = unpack("v",$srbytes);
or
$srbytes = "\x"."80\x3e\x00\x00";
$array1 = unpack("v",$srbytes);
使用 echo 打印此内容会显示带有第一个完整字符串的 ASCII 字符,但是连接的字符会显示文本,直到它通过连接的位置。
将完整字符串与连接字符串进行比较会显示错误,即使它们应该相同?
当我尝试连接时实际发生了什么
角色扩展不起作用,因为在你这样做的时候"\x" . "80"
PHP已经有两个字符串literals。不能指望这意味着其他任何事情but this.
无需尝试连接十六进制值进行扩展,只需连接实际字符即可,方法是将十六进制值转换为以 10 为基数的整数,然后将其传递给chr() http://php.net/chr,将其转换为实际字节。
$str = "";
$num1 = "80";
$str .= chr(base_convert($num1, 16, 10));
var_dump($str);
给你
string(1) "�"
当你真正看到它的价值时$srbytes
在您的示例中,您将其定义为字符串文字"\x80\x3e\x00\x00"
,你得到的是var_dump("\x80\x3e\x00\x00")
给你string(4) "�>"
,因为 PHP双引号字符串提供额外的字符扩展 http://php.net/manual/en/language.types.string.php#language.types.string.syntax.double例如将转义的十六进制值扩展为字节。然而,var_dump("\x"."80\x3e\x00\x00")
只是给你string(7) "\x80>"
,这是因为值"\x"
其本身只是一个字面意思"\x"
作为字符串。所以它们不是相同的值,不是。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)