带有变量的PHP包和
我不是一个程序员,我的谷歌fu今天也没什么吸引力。我正在尝试编写一个小程序,它接收一个CSV文件,其中包含主机、用户名等的列表,并以十六进制形式输出到一个文件,该文件带有特定的填充和控件,我正在使用该程序连接这些设备 问题是生成的文件需要计算每个变量的长度,而pack不喜欢dechex()中的格式。下面是我的代码的一个小示例带有变量的PHP包和,php,hex,pack,Php,Hex,Pack,我不是一个程序员,我的谷歌fu今天也没什么吸引力。我正在尝试编写一个小程序,它接收一个CSV文件,其中包含主机、用户名等的列表,并以十六进制形式输出到一个文件,该文件带有特定的填充和控件,我正在使用该程序连接这些设备 问题是生成的文件需要计算每个变量的长度,而pack不喜欢dechex()中的格式。下面是我的代码的一个小示例 // Login $bindata .= pack('sX',0x01); $length = (strlen($username) + 6); $length
// Login
$bindata .= pack('sX',0x01);
$length = (strlen($username) + 6);
$length = dechex($length);
print '>>> DEBUG LOGIN LENGTH: '.$length."\r\n";
$bindata .= pack('sX',$length); //hex length of string +6
$bindata .= pack('sX',0x00);
$bindata .= pack('sX',0x05);
$bindata .= "login";
$bindata .= $username;
问题是,$length可以显示为“c”或“11”,而pack需要0x0c或0x11,因此我的文件中的结果是它只输出00。有没有更好的方法来实现这一点,或者有没有方法将$length设置为0xXX。还是我只是个白痴,使用了错误的包参数
在过去的一个小时左右,我一直把头撞在墙上,非常感谢您的帮助。pack()的参数应该是数字。在打包之前,您不需要将其转换为十六进制,这使其成为一个字符串。这非常有效。非常非常感谢!对于后代来说,唯一需要的改变是注释掉或删除行:$length=dechex($length);