From c1acefd913903bb304d9e2a6bd828509ed4d55c3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Mon, 4 Apr 2011 23:44:28 +0000 Subject: [PATCH] - Introduced prependStringToString() which can prepend a string to an other by maintaining the total length. The prepended string will be truncated so the total length will not be exceeded. - Some debug messages added/commented out --- .../main/class_BaseFrameworkSystem.php | 62 ++++++++++++++++--- 1 file changed, 52 insertions(+), 10 deletions(-) diff --git a/inc/classes/main/class_BaseFrameworkSystem.php b/inc/classes/main/class_BaseFrameworkSystem.php index aa64808e..eed98512 100644 --- a/inc/classes/main/class_BaseFrameworkSystem.php +++ b/inc/classes/main/class_BaseFrameworkSystem.php @@ -1602,7 +1602,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @param $hex Hexadecimal string * @return $dec Decimal number */ - public final function hex2dec ($hex) { + protected function hex2dec ($hex) { // Convert to all lower-case $hex = strtolower($hex); @@ -1631,10 +1631,14 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * This work is based on comment #97756 on php.net documentation page at: * * - * @param $dec Decimal number, even with negative sign + * @param $dec Decimal number, even with negative sign + * @param $maxLength Optional maximum length of the string * @return $hex Hexadecimal string */ - public final function dec2hex ($dec) { + protected function dec2hex ($dec, $maxLength = 0) { + // maxLength can be zero or devideable by 2 + assert(($maxLength == 0) || (($maxLength % 2) == 0)); + // Detect sign (negative/positive numbers) $sign = ''; if ($dec < 0) { @@ -1653,10 +1657,12 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * We need hexadecimal strings with leading zeros if the length cannot * be divided by 2 */ - if ((strlen($hex) % 2) != 0) { - // Prepend a zero + if ($maxLength > 0) { + // Prepend more zeros + $hex = $this->prependStringToString($hex, '0', $maxLength); + } elseif ((strlen($hex) % 2) != 0) { $hex = '0' . $hex; - } // END - if + } // Return the hexadecimal string return $sign . $hex; @@ -1668,7 +1674,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @param $asc The ASCII string to be converted * @return $dec Decimal number */ - public final function asc2dec ($asc) { + protected function asc2dec ($asc) { // Convert it into a hexadecimal number $hex = bin2hex($asc); @@ -1682,10 +1688,10 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { /** * Converts a decimal number into an ASCII string. * - * @param $dec Decimal number + * @param $dec Decimal number * @return $asc An ASCII string */ - public final function dec2asc ($dec) { + protected function dec2asc ($dec) { // First convert the number into a hexadecimal string $hex = $this->dec2hex($dec); @@ -1703,8 +1709,9 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @param $hex Hexadecimal string * @return $asc An ASCII string */ - public final function hex2asc ($hex) { + protected function hex2asc ($hex) { // Check for length, it must be devideable by 2 + //* DEBUG: */ $this->debugOutput('hex='.$hex); assert((strlen($hex) % 2) == 0); // Walk the string @@ -1720,6 +1727,41 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // Return the final string return $asc; } + + /** + * Prepends a given string $prepend to $str with a given total length + * + * @param $str Given original string which should be prepended + * @param $prepend The string to prepend + * @param $length Total length of the final string + * @return $strFinal Final prepended string + */ + protected function prependStringToString ($str, $prepend, $length) { + // Set final string to original string by default + $strFinal = $str; + + // Can it devided + if (strlen($str) < $length) { + // Difference between total length and length of original string + $diff = $length - strlen($str); + + // Prepend the string + $prepend = str_repeat($prepend, ($diff / strlen($prepend) + 1)); + + // Make sure it will definedly fit + assert(strlen($prepend) >= $diff); + + // Cut it a little down + $prepend = substr($prepend, 0, $diff); + //* DEBUG: */ $this->debugOutput('prepend('.strlen($prepend).')='.$prepend.',diff='.$diff.',length='.$length); + + // Construct the final prepended string + $strFinal = $prepend . $str; + } // END - if + + // Return it + return $strFinal; + } } // [EOF] -- 2.39.5