michael@0: // Copyright (c) 2012 The Chromium Authors. All rights reserved. michael@0: // Use of this source code is governed by a BSD-style license that can be michael@0: // found in the LICENSE file. michael@0: michael@0: #ifndef BASE_STRINGS_STRING_NUMBER_CONVERSIONS_H_ michael@0: #define BASE_STRINGS_STRING_NUMBER_CONVERSIONS_H_ michael@0: michael@0: #include michael@0: #include michael@0: michael@0: #include "base/base_export.h" michael@0: #include "base/basictypes.h" michael@0: #include "base/strings/string16.h" michael@0: #include "base/strings/string_piece.h" michael@0: michael@0: // ---------------------------------------------------------------------------- michael@0: // IMPORTANT MESSAGE FROM YOUR SPONSOR michael@0: // michael@0: // This file contains no "wstring" variants. New code should use string16. If michael@0: // you need to make old code work, use the UTF8 version and convert. Please do michael@0: // not add wstring variants. michael@0: // michael@0: // Please do not add "convenience" functions for converting strings to integers michael@0: // that return the value and ignore success/failure. That encourages people to michael@0: // write code that doesn't properly handle the error conditions. michael@0: // ---------------------------------------------------------------------------- michael@0: michael@0: namespace base { michael@0: michael@0: // Number -> string conversions ------------------------------------------------ michael@0: michael@0: BASE_EXPORT std::string IntToString(int value); michael@0: BASE_EXPORT string16 IntToString16(int value); michael@0: michael@0: BASE_EXPORT std::string UintToString(unsigned value); michael@0: BASE_EXPORT string16 UintToString16(unsigned value); michael@0: michael@0: BASE_EXPORT std::string Int64ToString(int64 value); michael@0: BASE_EXPORT string16 Int64ToString16(int64 value); michael@0: michael@0: BASE_EXPORT std::string Uint64ToString(uint64 value); michael@0: BASE_EXPORT string16 Uint64ToString16(uint64 value); michael@0: michael@0: // DoubleToString converts the double to a string format that ignores the michael@0: // locale. If you want to use locale specific formatting, use ICU. michael@0: BASE_EXPORT std::string DoubleToString(double value); michael@0: michael@0: // String -> number conversions ------------------------------------------------ michael@0: michael@0: // Perform a best-effort conversion of the input string to a numeric type, michael@0: // setting |*output| to the result of the conversion. Returns true for michael@0: // "perfect" conversions; returns false in the following cases: michael@0: // - Overflow. |*output| will be set to the maximum value supported michael@0: // by the data type. michael@0: // - Underflow. |*output| will be set to the minimum value supported michael@0: // by the data type. michael@0: // - Trailing characters in the string after parsing the number. |*output| michael@0: // will be set to the value of the number that was parsed. michael@0: // - Leading whitespace in the string before parsing the number. |*output| will michael@0: // be set to the value of the number that was parsed. michael@0: // - No characters parseable as a number at the beginning of the string. michael@0: // |*output| will be set to 0. michael@0: // - Empty string. |*output| will be set to 0. michael@0: BASE_EXPORT bool StringToInt(const StringPiece& input, int* output); michael@0: BASE_EXPORT bool StringToInt(const StringPiece16& input, int* output); michael@0: michael@0: BASE_EXPORT bool StringToUint(const StringPiece& input, unsigned* output); michael@0: BASE_EXPORT bool StringToUint(const StringPiece16& input, unsigned* output); michael@0: michael@0: BASE_EXPORT bool StringToInt64(const StringPiece& input, int64* output); michael@0: BASE_EXPORT bool StringToInt64(const StringPiece16& input, int64* output); michael@0: michael@0: BASE_EXPORT bool StringToUint64(const StringPiece& input, uint64* output); michael@0: BASE_EXPORT bool StringToUint64(const StringPiece16& input, uint64* output); michael@0: michael@0: BASE_EXPORT bool StringToSizeT(const StringPiece& input, size_t* output); michael@0: BASE_EXPORT bool StringToSizeT(const StringPiece16& input, size_t* output); michael@0: michael@0: // For floating-point conversions, only conversions of input strings in decimal michael@0: // form are defined to work. Behavior with strings representing floating-point michael@0: // numbers in hexadecimal, and strings representing non-fininte values (such as michael@0: // NaN and inf) is undefined. Otherwise, these behave the same as the integral michael@0: // variants. This expects the input string to NOT be specific to the locale. michael@0: // If your input is locale specific, use ICU to read the number. michael@0: BASE_EXPORT bool StringToDouble(const std::string& input, double* output); michael@0: michael@0: // Hex encoding ---------------------------------------------------------------- michael@0: michael@0: // Returns a hex string representation of a binary buffer. The returned hex michael@0: // string will be in upper case. This function does not check if |size| is michael@0: // within reasonable limits since it's written with trusted data in mind. If michael@0: // you suspect that the data you want to format might be large, the absolute michael@0: // max size for |size| should be is michael@0: // std::numeric_limits::max() / 2 michael@0: BASE_EXPORT std::string HexEncode(const void* bytes, size_t size); michael@0: michael@0: // Best effort conversion, see StringToInt above for restrictions. michael@0: // Will only successful parse hex values that will fit into |output|, i.e. michael@0: // -0x80000000 < |input| < 0x7FFFFFFF. michael@0: BASE_EXPORT bool HexStringToInt(const StringPiece& input, int* output); michael@0: michael@0: // Best effort conversion, see StringToInt above for restrictions. michael@0: // Will only successful parse hex values that will fit into |output|, i.e. michael@0: // -0x8000000000000000 < |input| < 0x7FFFFFFFFFFFFFFF. michael@0: BASE_EXPORT bool HexStringToInt64(const StringPiece& input, int64* output); michael@0: michael@0: // Best effort conversion, see StringToInt above for restrictions. michael@0: // Will only successful parse hex values that will fit into |output|, i.e. michael@0: // 0x0000000000000000 < |input| < 0xFFFFFFFFFFFFFFFF. michael@0: // The string is not required to start with 0x. michael@0: BASE_EXPORT bool HexStringToUInt64(const StringPiece& input, uint64* output); michael@0: michael@0: // Similar to the previous functions, except that output is a vector of bytes. michael@0: // |*output| will contain as many bytes as were successfully parsed prior to the michael@0: // error. There is no overflow, but input.size() must be evenly divisible by 2. michael@0: // Leading 0x or +/- are not allowed. michael@0: BASE_EXPORT bool HexStringToBytes(const std::string& input, michael@0: std::vector* output); michael@0: michael@0: } // namespace base michael@0: michael@0: #endif // BASE_STRINGS_STRING_NUMBER_CONVERSIONS_H_