This commit is contained in:
Martin Brodbeck 2018-08-08 15:55:35 +02:00
parent c4f2a99572
commit e8db619e63
2 changed files with 54 additions and 2 deletions

View file

@ -13,9 +13,52 @@ std::string formatCentAsEuroString(const int cent, int width)
currStream << std::right << std::setw(width) << std::showbase
<< std::put_money(cent, false);
} catch (std::runtime_error& err) {
currStream << std::fixed << std::setw(width >= 4 ? width - 4 : width) << std::setprecision(2) << cent / 100.0L
<< "";
currStream << std::fixed << std::setw(width >= 4 ? width - 4 : width)
<< std::setprecision(2) << cent / 100.0L << "";
}
return currStream.str();
}
#ifdef _WIN32
// UTF-16 -> UTF-8 conversion
const std::string convert_to_utf8(const std::wstring& utf16_string)
{
// get length
int length =
WideCharToMultiByte(CP_UTF8, 0, utf16_string.c_str(), static_cast<int>(utf16_string.size()),
nullptr, 0, nullptr, nullptr);
if (!(length > 0))
return std::string();
else {
string result;
result.resize(static_cast<std::string::size_type>(length));
if (WideCharToMultiByte(CP_UTF8, 0, utf16_string.c_str(),
static_cast<int>(utf16_string.size()), &result[0],
static_cast<int>(result.size()), nullptr, nullptr) == 0)
throw error("Failure to execute convert_to_utf8: call to WideCharToMultiByte failed.");
else
return result;
}
}
// UTF-8 -> UTF-16 conversion
const std::wstring convert_to_utf16(const std::string& utf8_string)
{
// get length
int length = MultiByteToWideChar(CP_UTF8, 0, utf8_string.c_str(), static_cast<int>(utf8_string.size()), nullptr, 0);
if(!(length > 0))
return std::wstring();
else
{
wstring result;
result.resize(static_cast<std::string::size_type>(length));
if(MultiByteToWideChar(CP_UTF8, 0, utf8_string.c_str(), static_cast<int>(utf8_string.size()),
&result[0], static_cast<int>(result.size())) == 0 )
throw error("Failure to execute convert_to_utf16: call to MultiByteToWideChar failed.");
else
return result;
}
}
#endif

View file

@ -3,6 +3,15 @@
#include <string>
#ifdef _WIN32
#include <windows.h>
#endif
std::string formatCentAsEuroString(const int cent, int width = 10);
#ifdef __WIN32
const std::string convert_to_utf8(const std::wstring& utf16_string);
const std::wstring convert_to_utf16(const std::string& utf8_string);
#endif
#endif