- Introduced prependStringToString() which can prepend a string to an other by
authorRoland Häder <roland@mxchange.org>
Mon, 4 Apr 2011 23:44:28 +0000 (23:44 +0000)
committerRoland Häder <roland@mxchange.org>
Mon, 4 Apr 2011 23:44:28 +0000 (23:44 +0000)
  maintaining the total length. The prepended string will be truncated so the
  total length will not be exceeded.
- Some debug messages added/commented out

inc/classes/main/class_BaseFrameworkSystem.php

index aa64808..eed9851 100644 (file)
@@ -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:
         * <http://de.php.net/manual/en/function.hexdec.php#97756>
         *
-        * @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]