MFC:常见的不同类型相互转化的方法

一、字符串打印格式

常用的Cstring::Format(),相应数据类型对应的格式,使用实例如下

int a=1;
Cstring str;
str.Format("%d",a);
数据类型打印标识符
int%d
unsigned int%u
CString%s
以十六进制打印字节地址%p

二、LPARAM类型转化为CString类型

类型变量
LPARAMlParam
CStringstr

1.将变量lParam的值赋予str的方法:

  • ①使用构造函数
CString str((char*)lParam);   
  • ②使用运算符重载
str=(char*)lParam;//注意CString str=(char*)lParam;不会成功
  • ③使用CString的格式化函数:
str.format("%s", (char*)iParam);

三、CString转化为char类型

	CString strOrder = "MSF";
	char *buf = new char[strOrder.GetLength() + 1];
    memcpy(buf ,strOrder,strOrder.GetLength()); 

或者使用sprintf函数也可以

   int nIOCard=10;
    char cstr[30];
	CString str2;
	str2.Format("#%d", nIOCard);
    sprintf(cstr, str);

四、int类型和CString相互转化

类型变量
intnt
CStringstr

1. 将变量CString的值赋予int的方法:

nt= atoi(str);  

2. 将变量int的值赋予CString的方法:

str.Format("%d",nt); //效果可以理解为:先将str清空,然后再讲nt以文本字符串输入到str。当然也有直接在后边添加的函数CString::append()

PS:关于将int赋予CString,博主尝试过不借助中转变量(即利用MFC定义的宏直接将nt装换为字符串,而不是定义一个CStrinfg str然后再利用CString::Format的函数)。然而找不到这样的方法,有位网友是这样说的:没有直接将int转为CString这样的函数,一个是普通的数值变量,一个是类,没有可能转的。Format函数是把数值以文本模式字符串输出到CString里的

五、CString类型转化为unsigned int类型

最近调试一个BUG,就是在listview空间中输入的数据和取出的数据总是不一致,最后发现是下边这条语句出了问题
//m_Index = (unsigned int)atoi(list.GetItemText(i, 1));/
当list.GetItemText(i, 1)对应的数值(list.GetItemText(i, 1)的返回值是CString)大于2147483647时会出问题。换句话说atoi输出的值最大不会大于2147483647,因此最好要用_atoi64来进行转化。
m_Index = (unsigned int)_atoi64(list.GetItemText(i, 1));

六、关于CString[]数组的初始化问题

CString A[3];
CString B[3]={_T("")};
通过程序测试发现,数组A和B存放的东西是一样的,都是"\0"。好像是因为内置类型的数组编译器会自动进行零初始化。

七、unsigned char和int的转化

    unsigned int type;
    unsigned char *pType;
    type = 2;
    pType = (unsigned char *)&type;

不过一定要注意大小端对齐的问题,这和编译环境是有关系的,因此转换前后最好将值打印出来对比一下

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页