Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
src/DatastructConversion/conversions.cpp@4:91fa1c5ebbe1, 2019-03-27 (annotated)
- Committer:
- ziqiyap
- Date:
- Wed Mar 27 06:08:17 2019 +0000
- Revision:
- 4:91fa1c5ebbe1
working copy with sps30 lib integrated with sensordriver;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| ziqiyap | 4:91fa1c5ebbe1 | 1 | /** |
| ziqiyap | 4:91fa1c5ebbe1 | 2 | * @defgroup conversions Data Structure Conversions |
| ziqiyap | 4:91fa1c5ebbe1 | 3 | * @{ |
| ziqiyap | 4:91fa1c5ebbe1 | 4 | */ |
| ziqiyap | 4:91fa1c5ebbe1 | 5 | |
| ziqiyap | 4:91fa1c5ebbe1 | 6 | #include <sstream> |
| ziqiyap | 4:91fa1c5ebbe1 | 7 | #include <iomanip> |
| ziqiyap | 4:91fa1c5ebbe1 | 8 | #include <vector> |
| ziqiyap | 4:91fa1c5ebbe1 | 9 | #include "conversions.h" |
| ziqiyap | 4:91fa1c5ebbe1 | 10 | |
| ziqiyap | 4:91fa1c5ebbe1 | 11 | /** |
| ziqiyap | 4:91fa1c5ebbe1 | 12 | * @brief Converts a C++ string to C-string; Use free() to release mem after copying the content. |
| ziqiyap | 4:91fa1c5ebbe1 | 13 | * @author Lau Lee Hong |
| ziqiyap | 4:91fa1c5ebbe1 | 14 | * @param str C++ string |
| ziqiyap | 4:91fa1c5ebbe1 | 15 | * @return Pointer to a null-terminated array of character |
| ziqiyap | 4:91fa1c5ebbe1 | 16 | */ |
| ziqiyap | 4:91fa1c5ebbe1 | 17 | char* StringToChar(const std::string& str) |
| ziqiyap | 4:91fa1c5ebbe1 | 18 | { |
| ziqiyap | 4:91fa1c5ebbe1 | 19 | char* buffer = (char*)std::malloc(std::strlen(str.c_str()) + 1); |
| ziqiyap | 4:91fa1c5ebbe1 | 20 | if(buffer != NULL) |
| ziqiyap | 4:91fa1c5ebbe1 | 21 | { |
| ziqiyap | 4:91fa1c5ebbe1 | 22 | std::strcpy(buffer, str.c_str()); |
| ziqiyap | 4:91fa1c5ebbe1 | 23 | } |
| ziqiyap | 4:91fa1c5ebbe1 | 24 | |
| ziqiyap | 4:91fa1c5ebbe1 | 25 | return buffer; |
| ziqiyap | 4:91fa1c5ebbe1 | 26 | } |
| ziqiyap | 4:91fa1c5ebbe1 | 27 | |
| ziqiyap | 4:91fa1c5ebbe1 | 28 | /** |
| ziqiyap | 4:91fa1c5ebbe1 | 29 | * @brief Converts an int-type to string-type hex. |
| ziqiyap | 4:91fa1c5ebbe1 | 30 | * @author Lau Lee Hong |
| ziqiyap | 4:91fa1c5ebbe1 | 31 | * @param i Integer to be converted to hex string |
| ziqiyap | 4:91fa1c5ebbe1 | 32 | * @return Hexadecimal of string format |
| ziqiyap | 4:91fa1c5ebbe1 | 33 | */ |
| ziqiyap | 4:91fa1c5ebbe1 | 34 | std::string IntToHex(uint32_t i) |
| ziqiyap | 4:91fa1c5ebbe1 | 35 | { |
| ziqiyap | 4:91fa1c5ebbe1 | 36 | std::stringstream stream; |
| ziqiyap | 4:91fa1c5ebbe1 | 37 | stream << std::hex << i; |
| ziqiyap | 4:91fa1c5ebbe1 | 38 | return stream.str(); |
| ziqiyap | 4:91fa1c5ebbe1 | 39 | } |
| ziqiyap | 4:91fa1c5ebbe1 | 40 | |
| ziqiyap | 4:91fa1c5ebbe1 | 41 | /** |
| ziqiyap | 4:91fa1c5ebbe1 | 42 | * @brief Converts an int-type to string. |
| ziqiyap | 4:91fa1c5ebbe1 | 43 | * @author Lau Lee Hong |
| ziqiyap | 4:91fa1c5ebbe1 | 44 | * @param i (int)integer to be converted (std::string)integer |
| ziqiyap | 4:91fa1c5ebbe1 | 45 | * @return Integer of string format |
| ziqiyap | 4:91fa1c5ebbe1 | 46 | */ |
| ziqiyap | 4:91fa1c5ebbe1 | 47 | std::string IntToString(int v) |
| ziqiyap | 4:91fa1c5ebbe1 | 48 | { |
| ziqiyap | 4:91fa1c5ebbe1 | 49 | std::ostringstream oss; |
| ziqiyap | 4:91fa1c5ebbe1 | 50 | oss << v; |
| ziqiyap | 4:91fa1c5ebbe1 | 51 | return oss.str(); |
| ziqiyap | 4:91fa1c5ebbe1 | 52 | } |
| ziqiyap | 4:91fa1c5ebbe1 | 53 | |
| ziqiyap | 4:91fa1c5ebbe1 | 54 | /** |
| ziqiyap | 4:91fa1c5ebbe1 | 55 | * @brief Converts an double-type to a C-string with variable number of decimal places. |
| ziqiyap | 4:91fa1c5ebbe1 | 56 | * @author Lau Lee Hong |
| ziqiyap | 4:91fa1c5ebbe1 | 57 | * @param str buffer to store result |
| ziqiyap | 4:91fa1c5ebbe1 | 58 | * @param v value |
| ziqiyap | 4:91fa1c5ebbe1 | 59 | * @param decimal_digits number of decimal places |
| ziqiyap | 4:91fa1c5ebbe1 | 60 | * @return Null-terminated charcter array of double value with user-defined number of decimal places |
| ziqiyap | 4:91fa1c5ebbe1 | 61 | */ |
| ziqiyap | 4:91fa1c5ebbe1 | 62 | char* DoubleToChar(char* str, double v, int decimal_digits) |
| ziqiyap | 4:91fa1c5ebbe1 | 63 | { |
| ziqiyap | 4:91fa1c5ebbe1 | 64 | int i = 1; |
| ziqiyap | 4:91fa1c5ebbe1 | 65 | int int_part, fract_part; |
| ziqiyap | 4:91fa1c5ebbe1 | 66 | int len; |
| ziqiyap | 4:91fa1c5ebbe1 | 67 | char *ptr; |
| ziqiyap | 4:91fa1c5ebbe1 | 68 | |
| ziqiyap | 4:91fa1c5ebbe1 | 69 | /* Prepare decimal digits multiplicator */ |
| ziqiyap | 4:91fa1c5ebbe1 | 70 | for (; decimal_digits != 0; i *= 10, decimal_digits--); |
| ziqiyap | 4:91fa1c5ebbe1 | 71 | |
| ziqiyap | 4:91fa1c5ebbe1 | 72 | /* Calculate integer & fractional parts */ |
| ziqiyap | 4:91fa1c5ebbe1 | 73 | int_part = (int)v; |
| ziqiyap | 4:91fa1c5ebbe1 | 74 | fract_part = (int)((v - (double)(int)v) * i); |
| ziqiyap | 4:91fa1c5ebbe1 | 75 | |
| ziqiyap | 4:91fa1c5ebbe1 | 76 | /* Fill in integer part */ |
| ziqiyap | 4:91fa1c5ebbe1 | 77 | std::sprintf(str, "%i.", int_part); |
| ziqiyap | 4:91fa1c5ebbe1 | 78 | |
| ziqiyap | 4:91fa1c5ebbe1 | 79 | /* Prepare fill in of fractional part */ |
| ziqiyap | 4:91fa1c5ebbe1 | 80 | len = std::strlen(str); |
| ziqiyap | 4:91fa1c5ebbe1 | 81 | ptr = &str[len]; |
| ziqiyap | 4:91fa1c5ebbe1 | 82 | |
| ziqiyap | 4:91fa1c5ebbe1 | 83 | /* Fill in leading fractional zeros */ |
| ziqiyap | 4:91fa1c5ebbe1 | 84 | for (i /= 10; i > 1; i /= 10, ptr++) |
| ziqiyap | 4:91fa1c5ebbe1 | 85 | { |
| ziqiyap | 4:91fa1c5ebbe1 | 86 | if (fract_part >= i) |
| ziqiyap | 4:91fa1c5ebbe1 | 87 | { |
| ziqiyap | 4:91fa1c5ebbe1 | 88 | break; |
| ziqiyap | 4:91fa1c5ebbe1 | 89 | } |
| ziqiyap | 4:91fa1c5ebbe1 | 90 | *ptr = '0'; |
| ziqiyap | 4:91fa1c5ebbe1 | 91 | } |
| ziqiyap | 4:91fa1c5ebbe1 | 92 | |
| ziqiyap | 4:91fa1c5ebbe1 | 93 | /* Fill in (rest of) fractional part */ |
| ziqiyap | 4:91fa1c5ebbe1 | 94 | std::sprintf(ptr, "%i", fract_part); |
| ziqiyap | 4:91fa1c5ebbe1 | 95 | |
| ziqiyap | 4:91fa1c5ebbe1 | 96 | return str; |
| ziqiyap | 4:91fa1c5ebbe1 | 97 | } |
| ziqiyap | 4:91fa1c5ebbe1 | 98 | |
| ziqiyap | 4:91fa1c5ebbe1 | 99 | /** |
| ziqiyap | 4:91fa1c5ebbe1 | 100 | * @brief Converts a C++ string to an integer |
| ziqiyap | 4:91fa1c5ebbe1 | 101 | * @author Lee Tze Han |
| ziqiyap | 4:91fa1c5ebbe1 | 102 | * @param str C++ string |
| ziqiyap | 4:91fa1c5ebbe1 | 103 | * @return Integer from string representation |
| ziqiyap | 4:91fa1c5ebbe1 | 104 | */ |
| ziqiyap | 4:91fa1c5ebbe1 | 105 | int StringToInt(const std::string& str) |
| ziqiyap | 4:91fa1c5ebbe1 | 106 | { |
| ziqiyap | 4:91fa1c5ebbe1 | 107 | std::istringstream iss(str); |
| ziqiyap | 4:91fa1c5ebbe1 | 108 | int v; |
| ziqiyap | 4:91fa1c5ebbe1 | 109 | iss >> v; |
| ziqiyap | 4:91fa1c5ebbe1 | 110 | return v; |
| ziqiyap | 4:91fa1c5ebbe1 | 111 | } |
| ziqiyap | 4:91fa1c5ebbe1 | 112 | |
| ziqiyap | 4:91fa1c5ebbe1 | 113 | /** |
| ziqiyap | 4:91fa1c5ebbe1 | 114 | * @brief Converts a time_t object (from NTPClient) to a C++ string |
| ziqiyap | 4:91fa1c5ebbe1 | 115 | * @author Lee Tze Han |
| ziqiyap | 4:91fa1c5ebbe1 | 116 | * @param time time_t representing current time |
| ziqiyap | 4:91fa1c5ebbe1 | 117 | * @return String representation of the underlying typedef'd uint32_t |
| ziqiyap | 4:91fa1c5ebbe1 | 118 | */ |
| ziqiyap | 4:91fa1c5ebbe1 | 119 | //std::string TimeToString(const std::time_t time) |
| ziqiyap | 4:91fa1c5ebbe1 | 120 | //{ |
| ziqiyap | 4:91fa1c5ebbe1 | 121 | // std::ostringstream oss; |
| ziqiyap | 4:91fa1c5ebbe1 | 122 | // oss << time; |
| ziqiyap | 4:91fa1c5ebbe1 | 123 | // return oss.str(); |
| ziqiyap | 4:91fa1c5ebbe1 | 124 | //} |
| ziqiyap | 4:91fa1c5ebbe1 | 125 | // |
| ziqiyap | 4:91fa1c5ebbe1 | 126 | ///** |
| ziqiyap | 4:91fa1c5ebbe1 | 127 | // * @brief Converts a C++ string to time_t object |
| ziqiyap | 4:91fa1c5ebbe1 | 128 | // * @author Lee Tze Han |
| ziqiyap | 4:91fa1c5ebbe1 | 129 | // * @param str C++ string |
| ziqiyap | 4:91fa1c5ebbe1 | 130 | // * @return time_t from string representation |
| ziqiyap | 4:91fa1c5ebbe1 | 131 | // */ |
| ziqiyap | 4:91fa1c5ebbe1 | 132 | //std::time_t StringToTime(const std::string& str) |
| ziqiyap | 4:91fa1c5ebbe1 | 133 | //{ |
| ziqiyap | 4:91fa1c5ebbe1 | 134 | // std::istringstream iss(str); |
| ziqiyap | 4:91fa1c5ebbe1 | 135 | // std::time_t time; |
| ziqiyap | 4:91fa1c5ebbe1 | 136 | // iss >> time; |
| ziqiyap | 4:91fa1c5ebbe1 | 137 | // return time; |
| ziqiyap | 4:91fa1c5ebbe1 | 138 | //} |
| ziqiyap | 4:91fa1c5ebbe1 | 139 | |
| ziqiyap | 4:91fa1c5ebbe1 | 140 | /** @}*/ |