Orocos Real-Time Toolkit
2.5.0
|
00001 /*************************************************************************** 00002 tag: Peter Soetens Mon May 10 19:10:29 CEST 2004 rtconversions.cxx 00003 00004 rtconversions.cxx - description 00005 ------------------- 00006 begin : Mon May 10 2004 00007 copyright : (C) 2004 Peter Soetens 00008 email : peter.soetens@mech.kuleuven.ac.be 00009 00010 *************************************************************************** 00011 * This library is free software; you can redistribute it and/or * 00012 * modify it under the terms of the GNU General Public * 00013 * License as published by the Free Software Foundation; * 00014 * version 2 of the License. * 00015 * * 00016 * As a special exception, you may use this file as part of a free * 00017 * software library without restriction. Specifically, if other files * 00018 * instantiate templates or use macros or inline functions from this * 00019 * file, or you compile this file and link it with other files to * 00020 * produce an executable, this file does not by itself cause the * 00021 * resulting executable to be covered by the GNU General Public * 00022 * License. This exception does not however invalidate any other * 00023 * reasons why the executable file might be covered by the GNU General * 00024 * Public License. * 00025 * * 00026 * This library is distributed in the hope that it will be useful, * 00027 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00028 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * 00029 * Lesser General Public License for more details. * 00030 * * 00031 * You should have received a copy of the GNU General Public * 00032 * License along with this library; if not, write to the Free Software * 00033 * Foundation, Inc., 59 Temple Place, * 00034 * Suite 330, Boston, MA 02111-1307 USA * 00035 * * 00036 ***************************************************************************/ 00037 00038 #include "os/rtconversions.hpp" 00039 00040 #include <string> 00041 #include <cstdio> 00042 #include <cstdlib> 00043 #include <stdio.h> 00044 00045 using namespace std; 00046 00055 int string_to_int( const string& s ) 00056 { 00057 bool neg = false; 00058 int hulp = 0; 00059 00060 for ( unsigned int i = 0; i < s.size(); i++ ) 00061 { 00062 if ( ( i == 0 ) && ( s[ 0 ] == '-' ) ) 00063 { 00064 neg = true; 00065 continue; 00066 } 00067 if ( ( s[ i ] >= '0' ) && ( s[ i ] <= '9' ) ) 00068 { 00069 hulp *= 10; 00070 hulp += ( s[ i ] - '0' ); 00071 continue; 00072 } 00073 else 00074 { 00075 // error detected 00076 return 0; 00077 } 00078 } 00079 00080 if ( neg ) 00081 hulp *= -1; 00082 00083 return hulp; 00084 } 00085 00086 // float string_to_float(const string& s) 00087 // { 00088 // float f; 00089 // sscanf(s.c_str(),"%f", &f); 00090 // return f; 00091 // }; 00092 00093 char string_to_char( const string& s ) 00094 { 00095 if ( s.length() > 0 ) 00096 { 00097 return s[ 0 ]; 00098 } 00099 00100 else 00101 { 00102 return '0'; 00103 } 00104 00105 } 00106 00107 unsigned int string_to_unsigned_int( const string& s ) 00108 { 00109 unsigned int hulp = 0; 00110 00111 for ( unsigned int i = 0; i < s.size(); i++ ) 00112 { 00113 if ( ( s[ i ] >= '0' ) && ( s[ i ] <= '9' ) ) 00114 { 00115 hulp *= 10; 00116 hulp += ( s[ i ] - '0' ); 00117 continue; 00118 } 00119 00120 break; 00121 } 00122 00123 return hulp; 00124 } 00125 00126 string int_to_string( int i ) 00127 { 00128 string hulp; 00129 00130 if ( i < 0 ) 00131 { 00132 hulp += '-'; 00133 i *= -1; 00134 } 00135 00136 if ( i == 0 ) 00137 { 00138 hulp = "0"; 00139 return hulp; 00140 } 00141 00142 int t = 1000000000; 00143 bool start = true; 00144 00145 for ( int j = 0; t != 0; j++ ) 00146 { 00147 if ( start ) 00148 { 00149 if ( ( i / t ) == 0 ) 00150 { 00151 t /= 10; 00152 continue; 00153 } 00154 00155 else 00156 { 00157 start = false; 00158 } 00159 } 00160 00161 hulp += ( '0' + ( i / t ) ); 00162 i %= t; 00163 t /= 10; 00164 } 00165 00166 return hulp; 00167 } 00168 00169 string float_to_string(float f) 00170 { 00171 char buffer[ 128 ]; 00172 buffer[ 127 ] = '\0'; 00173 char s = ' '; // sign of integer 00174 int pre = int( f ); // voor de comma 00175 int post = int( ( f - pre ) * 1000.0 ); // na de comma 00176 00177 if ( post != 0 ) 00178 post = abs( post ); 00179 00180 if ( pre == 0 && f < 0.0 ) 00181 s = '-'; 00182 else 00183 s = ' '; 00184 00185 //snprintf( buffer, 127, "%c%d.%03d", s, pre, post ); 00186 //replacement with MSVC`s snprintf but it is not ALWAYS null terminating 00187 #ifdef _MSC_VER 00188 _snprintf( buffer, 127, "%c%d.%03d", s, pre, post ); 00189 #else 00190 snprintf( buffer, 127, "%c%d.%03d", s, pre, post ); 00191 #endif 00192 return string(buffer); 00193 } 00194 00195 string unsigned_int_to_string( unsigned int u ) 00196 { 00197 return int_to_string( u ); 00198 }