如何在PHP中获得字符串的十六进制转储?

如何在PHP中获得字符串的十六进制转储?

我在调查PHP 5中的编码。有什么方法可以获得字符串的原始十六进制转储吗?也就是说,字符串中每个字节(而不是字符)的十六进制表示?



哆啦的时光机
浏览 661回答 3
3回答

www说

为了调试二进制协议,我需要一个更传统的HEX转储,因此我编写了以下函数:function&nbsp;hex_dump($data,&nbsp;$newline="\n"){ &nbsp;&nbsp;static&nbsp;$from&nbsp;=&nbsp;''; &nbsp;&nbsp;static&nbsp;$to&nbsp;=&nbsp;''; &nbsp;&nbsp;static&nbsp;$width&nbsp;=&nbsp;16;&nbsp;#&nbsp;number&nbsp;of&nbsp;bytes&nbsp;per&nbsp;line &nbsp;&nbsp;static&nbsp;$pad&nbsp;=&nbsp;'.';&nbsp;#&nbsp;padding&nbsp;for&nbsp;non-visible&nbsp;characters &nbsp;&nbsp;if&nbsp;($from==='') &nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;($i=0;&nbsp;$i<=0xFF;&nbsp;$i++) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$from&nbsp;.=&nbsp;chr($i); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$to&nbsp;.=&nbsp;($i&nbsp;>=&nbsp;0x20&nbsp;&&&nbsp;$i&nbsp;<=&nbsp;0x7E)&nbsp;?&nbsp;chr($i)&nbsp;:&nbsp;$pad; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;} &nbsp;&nbsp;$hex&nbsp;=&nbsp;str_split(bin2hex($data),&nbsp;$width*2); &nbsp;&nbsp;$chars&nbsp;=&nbsp;str_split(strtr($data,&nbsp;$from,&nbsp;$to),&nbsp;$width); &nbsp;&nbsp;$offset&nbsp;=&nbsp;0; &nbsp;&nbsp;foreach&nbsp;($hex&nbsp;as&nbsp;$i&nbsp;=>&nbsp;$line) &nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;sprintf('%6X',$offset).'&nbsp;:&nbsp;'.implode('&nbsp;',&nbsp;str_split($line,2))&nbsp;.&nbsp;'&nbsp;['&nbsp;.&nbsp;$chars[$i]&nbsp;.&nbsp;']'&nbsp;.&nbsp;$newline; &nbsp;&nbsp;&nbsp;&nbsp;$offset&nbsp;+=&nbsp;$width; &nbsp;&nbsp;}}这会产生一个更传统的HEX转储,如下所示:hex_dump($data);=> &nbsp;0&nbsp;:&nbsp;05&nbsp;07&nbsp;00&nbsp;00&nbsp;00&nbsp;64&nbsp;65&nbsp;66&nbsp;61&nbsp;75&nbsp;6c&nbsp;74&nbsp;40&nbsp;00&nbsp;00&nbsp;00&nbsp;[.....default@...]10&nbsp;:&nbsp;31&nbsp;42&nbsp;38&nbsp;43&nbsp;39&nbsp;44&nbsp;30&nbsp;34&nbsp;46&nbsp;34&nbsp;33&nbsp;36&nbsp;31&nbsp;33&nbsp;38&nbsp;33&nbsp;[1B8C9D04F4361383]20&nbsp;:&nbsp;46&nbsp;34&nbsp;36&nbsp;32&nbsp;32&nbsp;46&nbsp;33&nbsp;39&nbsp;32&nbsp;46&nbsp;44&nbsp;38&nbsp;43&nbsp;33&nbsp;42&nbsp;30&nbsp;[F4622F392FD8C3B0]30&nbsp;:&nbsp;45&nbsp;34&nbsp;34&nbsp;43&nbsp;36&nbsp;34&nbsp;30&nbsp;33&nbsp;36&nbsp;33&nbsp;35&nbsp;37&nbsp;45&nbsp;35&nbsp;33&nbsp;39&nbsp;[E44C64036357E539]40&nbsp;:&nbsp;43&nbsp;43&nbsp;38&nbsp;44&nbsp;35&nbsp;31&nbsp;34&nbsp;42&nbsp;44&nbsp;36&nbsp;39&nbsp;39&nbsp;46&nbsp;30&nbsp;31&nbsp;34&nbsp;[CC8D514BD699F014]请注意,不可见字符被替换为句点-您可以更改每行字节数($宽度)和填充字符($pad)以满足您的需要。我包含了一个$newline参数,这样您就可以通过"<br/>"如果您需要在浏览器中显示输出。希望这是有用的:)
打开App,查看更多内容
随时随地看视频慕课网APP