抛弃GdCpp*.dll/pdb历史重新建库。libhv和Sqlite的dll保留

This commit is contained in:
Zhang Jianjun
2026-02-02 16:09:02 +08:00
parent f148ca49e3
commit 4a2a284ac0
292 changed files with 350450 additions and 0 deletions

237
source/StringHelper.cpp Normal file
View File

@@ -0,0 +1,237 @@
#include "pch.h"
#include <WinNls.h>
#include "StringHelper.h"
#include <string>
using namespace std;
bool cmpIngoreCase(const string& s1, const string& s2)
{
if (s1.length() != s2.length()) return false;
return std::equal(s1.begin(), s1.end(), s2.begin(),
[](char a, char b)->bool
{
return tolower(a) == tolower(b);
});
}
bool cmpIngoreCase(const std::string& s1, const char* s2)
{
if (s1.length() != strlen(s2)) return false;
return std::equal(s1.begin(), s1.end(), string_view(s2).begin(),
[](char a, char b)->bool
{
return tolower(a) == tolower(b);
});
}
bool cmpIngoreCase(const wstring& s1, const wstring& s2)
{
if (s1.length() != s2.length()) return false;
return std::equal(s1.begin(), s1.end(), s2.begin(),
[](wchar_t a, wchar_t b)->bool
{
return tolower(a) == tolower(b);
});
}
bool cmpIngoreCase(const std::wstring& s1, const wchar_t* s2)
{
if (s1.length() != wcslen(s2)) return false;
return std::equal(s1.begin(), s1.end(), wstring_view(s2).begin(),
[](wchar_t a, wchar_t b)->bool
{
return tolower(a) == tolower(b);
});
}
// Convert a wide Unicode string to an UTF8 string
std::string utf16_8(const std::wstring& wstr)
{
if (wstr.empty()) return std::string();
int size_needed = WideCharToMultiByte(CP_UTF8, 0, &wstr[0], (int)wstr.size(), NULL, 0, NULL, NULL);
std::string strTo(size_needed, 0);
WideCharToMultiByte(CP_UTF8, 0, &wstr[0], (int)wstr.size(), &strTo[0], size_needed, NULL, NULL);
return strTo;
}
std::string utf16_8(const wchar_t* wstr)
{
if (wstr == nullptr) return std::string();
int srclen = int(wcslen(wstr));
if (srclen == 0) return std::string();
int size_needed = WideCharToMultiByte(CP_UTF8, 0, wstr, srclen, NULL, 0, NULL, NULL);
std::string strTo(size_needed, 0);
WideCharToMultiByte(CP_UTF8, 0, wstr, srclen, &strTo[0], size_needed, NULL, NULL);
return strTo;
}
int utf16_8(const wchar_t* wstr, char* dst, int dstsize)
{
if (wstr == nullptr) return 0;
int size_needed = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
if (size_needed > dstsize) {
return 0;
}
WideCharToMultiByte(CP_UTF8, 0, wstr, -1, dst, size_needed, NULL, NULL);
return size_needed;
}
std::string Utf16ToGBK(const wchar_t* wstr)
{
if (wstr == nullptr) return std::string();
int srclen = int(wcslen(wstr));
if (srclen == 0) return std::string();
int size_needed = WideCharToMultiByte(CP_ACP, 0, wstr, srclen, NULL, 0, NULL, NULL);
std::string strTo(size_needed, 0);
WideCharToMultiByte(CP_ACP, 0, wstr, srclen, &strTo[0], size_needed, NULL, NULL);
return strTo;
}
int Utf16ToGBK(const wchar_t* wstr, char* dst, int dstsize)
{
if (wstr == nullptr) return 0;
int size_needed = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
if (size_needed > dstsize) {
return 0;
}
WideCharToMultiByte(CP_ACP, 0, wstr, -1, dst, size_needed, NULL, NULL);
return size_needed;
}
// Convert an UTF8 string to a wide Unicode String
std::wstring utf8_16(const std::string& str)
{
if (str.empty()) return std::wstring();
int size_needed = MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), NULL, 0);
std::wstring wstrTo(size_needed, 0);
MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), &wstrTo[0], size_needed);
return wstrTo;
}
std::wstring utf8_16(const char* str)
{
if (str == nullptr) return std::wstring();
int srclen = int(strlen(str));
if (srclen == 0) return std::wstring();
int size_needed = MultiByteToWideChar(CP_UTF8, 0, str, srclen, NULL, 0);
std::wstring strTo(size_needed, 0);
MultiByteToWideChar(CP_UTF8, 0, str, srclen, &strTo[0], size_needed);
return strTo;
}
#ifdef _WIN32
std::string GbkToUtf8(const std::string& src_str)
{
int srclen = int(src_str.size());
if (srclen == 0) return std::string();
const auto tmpsize = MultiByteToWideChar(CP_ACP, 0, &src_str[0], srclen, NULL, 0);
wchar_t* wstr = new wchar_t[tmpsize + 1];
MultiByteToWideChar(CP_ACP, 0, &src_str[0], srclen, wstr, tmpsize);
wstr[tmpsize] = 0;
auto dstlen = WideCharToMultiByte(CP_UTF8, 0, wstr, tmpsize, NULL, 0, NULL, NULL);
std::string dst_str(dstlen, 0);
WideCharToMultiByte(CP_UTF8, 0, wstr, tmpsize, &dst_str[0], dstlen, NULL, NULL);
delete[] wstr;
return dst_str;
}
std::string GbkToUtf8(const char* src_str)
{
int srclen = int(strlen(src_str));
if (srclen == 0) return std::string();
const auto tmpsize = MultiByteToWideChar(CP_ACP, 0, src_str, srclen, NULL, 0);
wchar_t* wstr = new wchar_t[tmpsize + 1];
MultiByteToWideChar(CP_ACP, 0, src_str, srclen, wstr, tmpsize);
wstr[tmpsize] = 0;
auto dstlen = WideCharToMultiByte(CP_UTF8, 0, wstr, tmpsize, NULL, 0, NULL, NULL);
std::string dst_str(dstlen, 0);
WideCharToMultiByte(CP_UTF8, 0, wstr, tmpsize, &dst_str[0], dstlen, NULL, NULL);
delete[] wstr;
return dst_str;
}
std::string Utf8ToGbk(const std::string& src_str)
{
int srclen = int(src_str.size());
if (srclen == 0) return std::string();
const auto tmpsize = MultiByteToWideChar(CP_UTF8, 0, &src_str[0], srclen, NULL, 0);
wchar_t* wstr = new wchar_t[tmpsize + 1];
MultiByteToWideChar(CP_UTF8, 0, &src_str[0], srclen, wstr, tmpsize);
wstr[tmpsize] = 0;
auto dstlen = WideCharToMultiByte(CP_ACP, 0, wstr, tmpsize, NULL, 0, NULL, NULL);
std::string dst_str(dstlen, 0);
WideCharToMultiByte(CP_ACP, 0, wstr, tmpsize, &dst_str[0], dstlen, NULL, NULL);
delete[] wstr;
return dst_str;
}
std::string Utf8ToGbk(const char* src_str)
{
int srclen = int(strlen(src_str));
if (srclen == 0) return std::string();
const auto tmpsize = MultiByteToWideChar(CP_UTF8, 0, src_str, srclen, NULL, 0);
wchar_t* wstr = new wchar_t[tmpsize + 1];
MultiByteToWideChar(CP_UTF8, 0, src_str, srclen, wstr, tmpsize);
wstr[tmpsize] = 0;
auto dstlen = WideCharToMultiByte(CP_ACP, 0, wstr, tmpsize, NULL, 0, NULL, NULL);
std::string dst_str(dstlen, 0);
WideCharToMultiByte(CP_ACP, 0, wstr, tmpsize, &dst_str[0], dstlen, NULL, NULL);
delete[] wstr;
return dst_str;
}
#else
#include <iconv.h>
int GbkToUtf8(char* str_str, size_t src_len, char* dst_str, size_t dst_len)
{
iconv_t cd;
char** pin = &str_str;
char** pout = &dst_str;
cd = iconv_open("utf8", "gbk");
if (cd == 0)
return -1;
memset(dst_str, 0, dst_len);
if (iconv(cd, pin, &src_len, pout, &dst_len) == -1)
return -1;
iconv_close(cd);
*pout = '\0';
return 0;
}
int Utf8ToGbk(char* src_str, size_t src_len, char* dst_str, size_t dst_len)
{
iconv_t cd;
char** pin = &src_str;
char** pout = &dst_str;
cd = iconv_open("gbk", "utf8");
if (cd == 0)
return -1;
memset(dst_str, 0, dst_len);
if (iconv(cd, pin, &src_len, pout, &dst_len) == -1)
return -1;
iconv_close(cd);
*pout = '\0';
return 0;
}
#endif