Program Listing for File NumberToString.h#
↰ Return to documentation for file (src/util/StringUtility/NumberToString.h)
#ifndef ROSE_StringUtility_NumberToString_H
#define ROSE_StringUtility_NumberToString_H
#include <BitOps.h>
#include <rosedll.h>
#include <string>
#include <sstream>
#include <iomanip>
#include <cassert>
#include <cstdint>
namespace Rose {
namespace StringUtility {
// Functions for converting numbers to strings
ROSE_UTIL_API std::string numberToString(long long);
ROSE_UTIL_API std::string numberToString(unsigned long long);
ROSE_UTIL_API std::string numberToString(long);
ROSE_UTIL_API std::string numberToString(unsigned long);
ROSE_UTIL_API std::string numberToString(int);
ROSE_UTIL_API std::string numberToString(unsigned int);
#if !defined(_MSC_VER) && \
defined(BACKEND_CXX_IS_GNU_COMPILER) && \
((BACKEND_CXX_COMPILER_MAJOR_VERSION_NUMBER == 4 && BACKEND_CXX_COMPILER_MINOR_VERSION_NUMBER > 6) || \
BACKEND_CXX_COMPILER_MAJOR_VERSION_NUMBER > 4) && \
__WORDSIZE == 64
ROSE_UTIL_API std::string numberToString(__int128 x);
ROSE_UTIL_API std::string numberToString(unsigned __int128 x);
#endif
ROSE_UTIL_API std::string numberToString(const void*);
ROSE_UTIL_API std::string numberToString(double);
ROSE_UTIL_API std::string intToHex(uint64_t);
ROSE_UTIL_API std::string toHex2(uint64_t value, size_t nbits,
bool show_unsigned_decimal=true, bool show_signed_decimal=true,
uint64_t decimal_threshold=256);
ROSE_UTIL_API std::string signedToHex2(uint64_t value, size_t nbits);
ROSE_UTIL_API std::string unsignedToHex2(uint64_t value, size_t nbits);
template<typename T> std::string toHex(T value) { return toHex2((uint64_t)value, 8*sizeof(T)); }
template<typename T> std::string signedToHex(T value) { return signedToHex2((uint64_t)value, 8*sizeof(T)); }
template<typename T> std::string unsignedToHex(T value) { return unsignedToHex2((uint64_t)value, 8*sizeof(T)); }
ROSE_UTIL_API std::string addrToString(uint64_t value, size_t nbits = 0);
ROSE_UTIL_API std::string addrIntervalToString(uint64_t low, uint64_t high, size_t nbits = 0);
template<typename Unsigned>
std::string toBinary(Unsigned value, size_t nBits = 0, size_t groupSize = 4, const std::string groupSeparator = "_") {
if (0 == nBits)
nBits = BitOps::nBits(value);
std::string retval;
for (size_t i = nBits; i > 0; --i) {
retval += BitOps::bit(value, i-1) ? '1' : '0';
if (groupSize > 0 && i > 1 && (i-1) % groupSize == 0)
retval += groupSeparator;
}
return retval;
}
} // namespace
} // namespace
#endif