Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有变量的PHP包和_Php_Hex_Pack - Fatal编程技术网

带有变量的PHP包和

带有变量的PHP包和,php,hex,pack,Php,Hex,Pack,我不是一个程序员,我的谷歌fu今天也没什么吸引力。我正在尝试编写一个小程序,它接收一个CSV文件,其中包含主机、用户名等的列表,并以十六进制形式输出到一个文件,该文件带有特定的填充和控件,我正在使用该程序连接这些设备 问题是生成的文件需要计算每个变量的长度,而pack不喜欢dechex()中的格式。下面是我的代码的一个小示例 // Login $bindata .= pack('sX',0x01); $length = (strlen($username) + 6); $length

我不是一个程序员,我的谷歌fu今天也没什么吸引力。我正在尝试编写一个小程序,它接收一个CSV文件,其中包含主机、用户名等的列表,并以十六进制形式输出到一个文件,该文件带有特定的填充和控件,我正在使用该程序连接这些设备

问题是生成的文件需要计算每个变量的长度,而pack不喜欢dechex()中的格式。下面是我的代码的一个小示例

// 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);