From: fred Date: Wed, 19 Feb 1997 17:20:27 +0000 (+0000) Subject: flower-1.1.0 X-Git-Tag: release/1.5.59~6319 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=8647ed204dfe9d1beb4dbfda3726b0ef43b077aa;p=lilypond.git flower-1.1.0 --- diff --git a/flower/stringconversion.cc b/flower/stringconversion.cc new file mode 100644 index 0000000000..7a9d1f4551 --- /dev/null +++ b/flower/stringconversion.cc @@ -0,0 +1,88 @@ +/* + PROJECT: FlowerSoft C++ library + FILE : stringconversion.cc + +--*/ + + +#include +#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 index 0000000000..39b809e4c4 --- /dev/null +++ b/flower/stringconversion.hh @@ -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 //