Win32 API功能封装
+ -

不同编码之间的转换(UTF-8,UNICODE,多字节,宽字节)

2022-01-16 104 0
  1. BOOL CUtils::CharToWchar(std::string src, std::wstring& dest)
  2. {
  3. int dwMinSize = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, src.c_str(), -1, NULL, 0);
  4. if (dwMinSize == 0)
  5. {
  6. return 0;
  7. }
  8. dest.resize(dwMinSize);
  9. int nlen = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, src.c_str(), -1, &dest.at(0), dwMinSize);
  10. return nlen > 0;
  11. }
  12. BOOL CUtils::WcharToChar(std::wstring src, std::string& dest)
  13. {
  14. int dwMinSize = WideCharToMultiByte(CP_ACP, NULL, src.c_str(), -1, NULL, 0, NULL, FALSE);
  15. if (dwMinSize == 0)
  16. {
  17. return 0;
  18. }
  19. dest.resize(dwMinSize);
  20. int nlen = WideCharToMultiByte(CP_ACP, NULL, src.c_str(), -1, &dest.at(0), dwMinSize, NULL, FALSE);
  21. return nlen > 0;
  22. }
  23. BOOL CUtils::UTF8ToWchar(std::string src, std::wstring& dest)
  24. {
  25. //预转换,得到所需空间的大小;
  26. int wcsLen = ::MultiByteToWideChar(CP_UTF8, NULL, src.c_str(), src.size(), NULL, 0);
  27. if (wcsLen == 0)
  28. {
  29. return 0;
  30. }
  31. dest.resize(wcsLen);
  32. int nLen = ::MultiByteToWideChar(CP_UTF8, NULL, src.c_str(), src.size(), &dest.at(0), wcsLen);
  33. return wcsLen > 0;
  34. }
  35. BOOL CUtils::WcharToUTF8(std::wstring src, std::string& dest)
  36. {
  37. int dwMinSize = WideCharToMultiByte(CP_UTF8, NULL, src.c_str(), -1, NULL, 0, NULL, FALSE);
  38. if (dwMinSize == 0)
  39. {
  40. return 0;
  41. }
  42. dest.resize(dwMinSize);
  43. int nLen = WideCharToMultiByte(CP_UTF8, 0, src.c_str(), -1, &dest.at(0), dwMinSize, NULL, NULL);
  44. return nLen > 0;
  45. }

0 篇笔记 写笔记

UNICODE_STRING的初始化
UNICODE_STRING结构体的三个成员可以看到,其包含的是字符串的指针,字符串的实际长度和字符串指针的内存空间长。学过C语言的我们都知道,要对一个指针的内存进行赋值,就必须确定这个指针指向的内存空间可用,否则会导致内存使用异常。在应用层中会导致应用程序异常,而在驱动中会导致蓝屏。我们们这里使......
字符串UNICODE_STRING
在Windows下编程,根据字符串的使用分为UNICODE编程和我们平常使用的多字节编程。我们开发Windows驱动使用的是C语言。在C语言中定义的字符串是以为结尾表示一个字符串的结束。 char* pStr="www.pnpon.com";// ansi字符串 ......
UNICODE_STRING的拼接
像普通的字符串使用strcat一样,UNICODE_STRING也支持拼接功能。UNICODE_STRING的拼接按源字符的类型分为以下几中:RtlAppendUnicodeToString拼接将一个宽字节接接到UNICODE_STRING中。这里使用RtlAppendUnicodeToStrin......
UNICODE_STRING的打印
字符串的连接另一种常见的情况是字符串和数字的组合。有时数字需要被转换为字符串。有时需要把若干个数字和字符串混合组合起来。这往往用于打印日志的时候。日志中可能含有文件名、时间、和行号,以及其他的信息。熟悉C语言的读者会使用sprintf。这个函数的宽字符版本为swprintf。该函数在驱动开发中依然......
UNICODE_STRING的拷贝复制
由于UNICODE_STRING和ANSI_STRING字符串是一个结构体,所以UNICODE_STRING和ANSI_STRING字符串的拷贝就不能使用wcscpy和strcpy来进行拷贝了。微软的WDK中提供了专门的函数RtlCopyUnicodeString和RtlCopyString来进行U......
不同编码之间的转换(UTF-8,UNICODE,多字节宽字节
BOOL CUtils::CharToWchar(std::string src, std::wstring& dest){ int dwMinSize = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, src.c_str(), -1, ......
Windows内核STRING转UNICODE
VOIDConvertToUnicodeString( IN CHAR * Buffer, IN ULONG ResultBufferLength, IN ULONG ResultBufferOffset, OUT LPWSTR ResultBuffer, ......
UNICODE多字节和通用兼容字符串函数对照表
Generic-text routine nameSBCS (_UNICODE & MBCS not defined)_MBCS defined_UNICODE defined_cgetts_cgets_cgets_cgetws_cgetts_s_cget......
ANSI_STRING字符串与UNICODE_STRING字符串相互转换 - Windows内核模式下的字符串操作
函数名称:RtlUnicodeStringToAnsiString功能描述:将UNICODE_STRING字符串转化成ANSI_STRING字符串参数列表:DestinationString:需要转化的字符串SourceString:需要转换的原字符串AllocateDesctinationSt......
ASCII字符串和宽字符串处理
在驱动程序开发中,DDK将char和wchar_t类别,替换成CHAR和WCHAR类别驱动程序中用KdPrint打印ASCII字符串和宽字符串:打印ASCII字符串 CHAR *string = “Hello”;  KdPrint(“%s ”, string);打印WCHAR字符串  ......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!