string_util.cpp
Go to the documentation of this file.
1 // *****************************************************************************
2 //
3 // Copyright (c) 2014, Southwest Research Institute® (SwRI®)
4 // All rights reserved.
5 //
6 // Redistribution and use in source and binary forms, with or without
7 // modification, are permitted provided that the following conditions are met:
8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above copyright
11 // notice, this list of conditions and the following disclaimer in the
12 // documentation and/or other materials provided with the distribution.
13 // * Neither the name of Southwest Research Institute® (SwRI®) nor the
14 // names of its contributors may be used to endorse or promote products
15 // derived from this software without specific prior written permission.
16 //
17 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 // ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
21 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 //
28 // *****************************************************************************
29 
31 
32 #include <cerrno>
33 #include <cstdlib>
34 #include <limits>
35 
36 namespace swri_string_util
37 {
38  bool ToDouble(const std::string& string, double& value)
39  {
40  if (string.empty())
41  {
42  return false;
43  }
44 
45  char* end;
46  errno = 0;
47  double number = strtod(string.c_str(), &end);
48 
49  // Check if an error occured or if there are junk characters at the end.
50  if (errno != 0 || end != string.c_str() + string.length())
51  {
52  return false;
53  }
54 
55  value = number;
56  return true;
57  }
58 
59  bool ToFloat(const std::string& string, float& value)
60  {
61  if (string.empty())
62  {
63  return false;
64  }
65 
66  char* end;
67  errno = 0;
68  float number = strtof(string.c_str(), &end);
69 
70  // Check if an error occured or if there are junk characters at the end.
71  if (errno != 0 || end != string.c_str() + string.length())
72  {
73  return false;
74  }
75 
76  value = number;
77  return true;
78  }
79 
80  bool ToInt32(const std::string& string, int32_t& value, int32_t base)
81  {
82  if (string.empty())
83  {
84  return false;
85  }
86 
87  char* end;
88  errno = 0;
89  int64_t number = strtol(string.c_str(), &end, base);
90 
91  // Check if an error occured or if there are junk characters at the end.
92  if (errno != 0 || end != string.c_str() + string.length())
93  {
94  return false;
95  }
96 
97  if (number > std::numeric_limits<int32_t>::max() ||
98  number < std::numeric_limits<int32_t>::min())
99  {
100  return false;
101  }
102 
103  value = number;
104  return true;
105  }
106 
107  bool ToUInt32(const std::string& string, uint32_t& value, int32_t base)
108  {
109  if (string.empty())
110  {
111  return false;
112  }
113 
114  char* end;
115  errno = 0;
116  int64_t number = strtol(string.c_str(), &end, base);
117 
118  // Check if an error occured or if there are junk characters at the end.
119  if (errno != 0 || end != string.c_str() + string.length())
120  {
121  return false;
122  }
123 
124  if (number > std::numeric_limits<uint32_t>::max() || number < 0)
125  {
126  return false;
127  }
128 
129  value = number;
130  return true;
131  }
132 }
bool ToInt32(const std::string &string, int32_t &value, int32_t base=10)
Definition: string_util.cpp:80
bool ToUInt32(const std::string &string, uint32_t &value, int32_t base=10)
bool ToFloat(const std::string &string, float &value)
Definition: string_util.cpp:59
bool ToDouble(const std::string &string, double &value)
Definition: string_util.cpp:38


swri_string_util
Author(s): Marc Alban
autogenerated on Tue Nov 3 2020 17:29:54