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;

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

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值