Нужна помощь в портировании функции ruby ​​на php - PullRequest
0 голосов
/ 04 июня 2011

У меня есть эта функция:

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 ()

1 Ответ

1 голос
/ 04 июня 2011

Также должно работать:

<?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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...