SOUI, UI, just so so!

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 461|回复: 1

SStringT和std::string的转换

[复制链接]

14

主题

25

帖子

252

积分

超级版主

Rank: 8Rank: 8

积分
252
发表于 2017-11-28 16:24:40 | 显示全部楼层 |阅读模式
SOUI提供了SStringA, SStringW来表示字符串。和std::string, std::wstring对应。一个表示多字节字符串,一个表示宽字符串。
SOUI提供了一组字符串编码转换的宏:
  1. namespace SOUI
  2. {

  3.     class UTILITIES_API SStrCpCvt
  4.     {
  5.     public:
  6.         static SStringA CvtW2A(const SStringW & str,unsigned int cp=CP_ACP);

  7.         static SStringW CvtA2W(const SStringA & str,unsigned int cp=CP_ACP,unsigned int cp2=0);

  8.         static SStringA CvtA2A(const SStringA & str,unsigned int cpFrom=CP_UTF8,unsigned int cpTo=CP_ACP);

  9.         static SStringW CvtW2W(const SStringW &str,unsigned int cp=CP_ACP);

  10.     };


  11. }//end of namespace SOUI

  12. #define S_CA2W SStrCpCvt::CvtA2W
  13. #define S_CW2A SStrCpCvt::CvtW2A
  14. #define S_CA2A SStrCpCvt::CvtA2A
  15. #define S_CW2W SStrCpCvt::CvtW2W

  16. #ifdef UNICODE
  17. #define S_CA2T S_CA2W
  18. #define S_CT2A S_CW2A
  19. #define S_CW2T S_CW2W
  20. #define S_CT2W S_CW2W
  21. #else
  22. #define S_CA2T S_CA2A
  23. #define S_CT2A S_CA2A
  24. #define S_CW2T S_CW2A
  25. #define S_CT2W S_CA2W
  26. #endif // UNICODE
复制代码
使用上述宏可以完成基本上所有的编码转换。
很多人不知道如何把SStringA转换成std::string.
关键原因可能是分不清char *, const char*, LPCSTR这几个类型。
LPCSTR展开就是const char*. SStringA可以自动转换成LPCSTR.
比如:
SStringA str="abc";
LPCSTR str2 = str;//这是合法的,等价于 str2 = (LPCSTR)str;
std::string str3 = str;//这也是合法的。
但是
char * str4=str;//这是不合法的,编译不了。
如果一定要用char*
可以用下面的方法:
char * str5 = str.GetBuffer(1000);
....
str.ReleaseBuffer();//这一句很重要。
也可以用下面的方法:
char *str6=str.LockBuffer();
...
str.UnlockBuffer();

GetBuffer可以分配需要的空间,LockBuffer则只改变内部的引用计数。
它们都需要后面的ReleaseBuffer, UnlockBuffer来配对使用。

std::string转换成SStringA就简单了:
std::string str="abc";
SStringA str2=str.c_str();  //需要执行strlen来计算长度。
or
SStringA str3(str.c_str(),str.length());



回复

使用道具 举报

0

主题

4

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2018-9-11 12:10:11 | 显示全部楼层
顶顶顶,就是这个~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|Setoutsoft Inc. ( 粤ICP备18051196-1 )

GMT+8, 2018-11-17 23:59 , Processed in 0.052216 second(s), 5 queries , File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表