]> git.donarmstrong.com Git - lilypond.git/blob - flower/stringconversion.cc
7a9d1f4551d25bafd0aec33e1b6e20d1e2981605
[lilypond.git] / flower / stringconversion.cc
1 /*
2   PROJECT: FlowerSoft C++ library
3   FILE   : stringconversion.cc
4
5 --*/
6
7
8 #include <assert.h>
9 #include "string.hh"
10
11 String
12 StringConversion::bin2hex_str( String bin_str )
13 {
14     String str;
15     Byte const* by_c_l = bin_str.by_c_l();
16     for ( int i = 0; i < bin_str.length_i(); i++ ) {
17         str += (char)nibble2hex_by( *by_c_l >> 4 );
18         str += (char)nibble2hex_by( *by_c_l++ );
19     }
20     return str;
21 }
22
23 int
24 StringConversion::hex2bin_i( String hex_str, String& bin_str_r )
25 {
26     if ( hex_str.length_i() % 2 )
27         hex_str = "0" + hex_str;
28
29     bin_str_r = "";
30     Byte const* by_c_l= hex_str.by_c_l();
31     int i = 0;
32     while ( i < hex_str.length_i() ) {   
33         int high_i = hex2nibble_i( *by_c_l++ );
34         int low_i = hex2nibble_i( *by_c_l++ );
35         if ( high_i < 0 || low_i < 0 )
36             return 1; // illegal char
37         bin_str_r += String( (char)( high_i << 4 | low_i ), 1 );
38         i += 2;
39     }
40     return 0;
41 }
42
43 String 
44 StringConversion::hex2bin_str( String hex_str )
45 {
46     String str;
47 //  silly, asserts should alway be "on"!
48 //    assert( !hex2bin_i( hex_str, str ) );
49     int error_i = hex2bin_i( hex_str, str );
50     assert( !error_i );
51     return str;
52 }
53
54 int 
55 StringConversion::hex2nibble_i( Byte by )
56 {
57     if ( by >= '0' && by <= '9' )
58         return by - '0';
59     if ( by >= 'A' && by <= 'F' )
60         return by - 'A' + 10;
61     if ( by >= 'a' && by <= 'f')
62         return by - 'a' + 10;
63     return -1;
64 }
65     
66 String 
67 StringConversion::int2hex_str( int i, int length_i, char ch )
68 {
69     String str;
70     if ( !i )
71         str = "0";
72     while ( i ) {
73         str = ( i % 16 )["0123456789abcdef"] + str;
74         i /= 16;
75     }
76     if ( str.length_i() < length_i )
77         str = String( ch, length_i - str.length_i() ) + str;
78     return str;
79 }
80
81 Byte
82 StringConversion::nibble2hex_by( Byte by )
83 {
84     if ( ( by & 0x0f ) <= 9 )
85         return ( by & 0x0f ) + '0';
86     else
87         return ( by & 0x0f ) - 10 + 'a';
88 }