]> git.donarmstrong.com Git - lilypond.git/commitdiff
flower-1.1.0
authorfred <fred>
Wed, 19 Feb 1997 17:20:27 +0000 (17:20 +0000)
committerfred <fred>
Wed, 19 Feb 1997 17:20:27 +0000 (17:20 +0000)
flower/stringconversion.cc [new file with mode: 0644]
flower/stringconversion.hh [new file with mode: 0644]

diff --git a/flower/stringconversion.cc b/flower/stringconversion.cc
new file mode 100644 (file)
index 0000000..7a9d1f4
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+  PROJECT: FlowerSoft C++ library
+  FILE   : stringconversion.cc
+
+--*/
+
+
+#include <assert.h>
+#include "string.hh"
+
+String
+StringConversion::bin2hex_str( String bin_str )
+{
+    String str;
+    Byte const* by_c_l = bin_str.by_c_l();
+    for ( int i = 0; i < bin_str.length_i(); i++ ) {
+       str += (char)nibble2hex_by( *by_c_l >> 4 );
+       str += (char)nibble2hex_by( *by_c_l++ );
+    }
+    return str;
+}
+
+int
+StringConversion::hex2bin_i( String hex_str, String& bin_str_r )
+{
+    if ( hex_str.length_i() % 2 )
+        hex_str = "0" + hex_str;
+
+    bin_str_r = "";
+    Byte const* by_c_l= hex_str.by_c_l();
+    int i = 0;
+    while ( i < hex_str.length_i() ) {   
+        int high_i = hex2nibble_i( *by_c_l++ );
+        int low_i = hex2nibble_i( *by_c_l++ );
+        if ( high_i < 0 || low_i < 0 )
+            return 1; // illegal char
+        bin_str_r += String( (char)( high_i << 4 | low_i ), 1 );
+        i += 2;
+    }
+    return 0;
+}
+
+String 
+StringConversion::hex2bin_str( String hex_str )
+{
+    String str;
+//  silly, asserts should alway be "on"!
+//    assert( !hex2bin_i( hex_str, str ) );
+    int error_i = hex2bin_i( hex_str, str );
+    assert( !error_i );
+    return str;
+}
+
+int 
+StringConversion::hex2nibble_i( Byte by )
+{
+    if ( by >= '0' && by <= '9' )
+        return by - '0';
+    if ( by >= 'A' && by <= 'F' )
+        return by - 'A' + 10;
+    if ( by >= 'a' && by <= 'f')
+        return by - 'a' + 10;
+    return -1;
+}
+    
+String 
+StringConversion::int2hex_str( int i, int length_i, char ch )
+{
+    String str;
+    if ( !i )
+       str = "0";
+    while ( i ) {
+       str = ( i % 16 )["0123456789abcdef"] + str;
+       i /= 16;
+    }
+    if ( str.length_i() < length_i )
+       str = String( ch, length_i - str.length_i() ) + str;
+    return str;
+}
+
+Byte
+StringConversion::nibble2hex_by( Byte by )
+{
+    if ( ( by & 0x0f ) <= 9 )
+       return ( by & 0x0f ) + '0';
+    else
+       return ( by & 0x0f ) - 10 + 'a';
+}
diff --git a/flower/stringconversion.hh b/flower/stringconversion.hh
new file mode 100644 (file)
index 0000000..39b809e
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+  PROJECT: FlowerSoft C++ library
+  FILE   : stringconversion.hh
+
+*/
+
+#ifndef __STRING_CONVERSION_HH
+#define __STRING_CONVERSION_HH
+
+/**
+  all conversions from/to String go in here.( some time, anyway )
+  Quite empty
+  */
+class StringConversion {
+       static int hex2bin_i( String hex_str, String& bin_str_r );
+       static int hex2nibble_i( Byte by );
+       static Byte nibble2hex_by( Byte by );
+public:
+       static String bin2dec_str( String dec_str );
+static String bin2hex_str( String bin_str );
+       static String dec2bin_str( String str );
+       static int dec2int_i( String str );
+       static int hex2int_i( String str );
+       static String hex2bin_str( String str );
+       static String int2hex_str( int i, int length_i, char ch );
+       static String int2dec_str( int i, int length_i, char ch );
+};
+
+#endif // __STRING_CONVERSION_HH //