PHP: PHP_EOL в .txt файле был ошибочным, как я могу с этим справиться? - PullRequest
0 голосов
/ 22 сентября 2018

Я работаю над домашней работой DES Encrypt / Decrypt.Требуется превратить 64-битные данные (в моей работе это строка) в двоичные.После некоторых видов вычислений верните двоичный код в строку.Вот мой код:

/**
* turn string into binary
* @param type $str
* @return type
*/
function strToBin($str){

    //1.split characters
    $arr = preg_split('/(?<!^)(?!$)/u', $str);

    //2.unpack characters
    foreach($arr as &$v){
        $temp = unpack('H*', $v);
        $v = base_convert($temp[1], 16, 2);
        unset($temp);
    }
    return join(' ',$arr);
}

/**
* binary into string
* @param type $str
* @return type
*/
function binToStr($str){
    $arr = explode(' ', $str);
    foreach($arr as &$v){
    $v = pack("H".strlen(base_convert($v, 2, 16)), 
        base_convert($v, 2, 16));
    }
    return join('', $arr);
}

, но когда я проверял его, PHP_EOL в .txt файле был ошибочным.

тестовая часть кода:

while(!feof($inputFile)){
    $stringOriginal = fread($inputFile,"8");

    //test
    $stringOperated =  binToStr(strToBin($stringOriginal));

    fwrite($ouputFile,$stringOperated,"8");
}

Вот результат: введите описание изображения здесь

Как я могу иметь дело с PHP_EOL?Большое спасибо!

1 Ответ

0 голосов
/ 22 сентября 2018

После нескольких экспериментов, я думаю, что это связано с преобразованием символа PHP_EOL в шестнадцатеричный код, и тот факт, что он производит только одну шестнадцатеричную цифру (a), тогда как все остальные символы представляют собой двухзначные шестнадцатеричные числа.Это, кажется, сбивает с толку, поэтому я думаю, что ответ сводится к заполнению преобразования в гекс, чтобы убедиться, что у них всех есть 2 символа ...

function binToStr($str){
    $arr = explode(' ', $str);
    foreach($arr as &$v){
        $conv = str_pad(base_convert($v, 2, 16),2,"0", STR_PAD_LEFT);
        $v = pack("H". strlen($conv), $conv);
    }
    return join('', $arr);
}

Я тоже попробовал это, так что, надеюсь, на этот разэто поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...