我有这个红宝石功能:
def WhitespaceHexEncode(str)
result = ""
whitespace = ""
str.each_byte do |b|
result << whitespace << "%02x" % b
whitespace = " " * (rand(3) + 1)
end
result
end
我试图在php上做同样的事情,这是我到目前为止的代码:
function WhitespaceHexEncode($str)
{
$result = "";
$whitespace = "";
for($i=0;$i<strlen($str);$i++)
{
$result = $result.$whitespace.sprintf("%02x", $str[$i]);
$whitespace = " ";
for($x=0;$x<rand(0,5);$x++)
$whitespace = $whitespace." ";
}
return $result;
}
但是PHP函数没有显示与ruby相同的输出,例如:
print WhitespaceHexEncode("test fsdf dgksdkljfsd sdfjksdfsl")
Output: 74 65 73 74 20 66 73 64 66 20 64 67 6b 73 64 6b 6c 6a 66 73 64 20 73 64 66 6a 6b 73 64 66 73 6c
--------------------------------------------------------------
echo WhitespaceHexEncode("test fsdf dgksdkljfsd sdfjksdfsl")
Output: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
有人能告诉我php代码有什么问题吗?
更新:使用bin2hex()
修复了它答案 0 :(得分:1)
以下内容也应该有效:
<?php
function WhitespaceHexEncode($str) {
$result = '';
foreach (str_split($str) as $b) {
$bytes = $whitespace = sprintf('%02x', ord($b));
$whitespace = str_repeat(' ', (rand(0, 5) + 1));
$result .= $bytes . $whitespace;
}
return $result;
}
echo WhitespaceHexEncode('test fsdf dgksdkljfsd sdfjksdfsl');