OpenCV cv::String和 MFC CString互相转换

format 函数

Returns a text string formatted using the printf-like expression.

string format( const char* fmt, … )

Parameters
fmt – printf -compatible formatting specifiers.

The function acts like sprintf but forms and returns an STL string. It can be used to form an error message in the
Exception() constructor.

举例: 欲创建一个文件是 ABC0004.txt。

int No = 4;

filename = “ABC” + cv::format("%.4d",No) + “.txt”;
CString转string 例子:

Getbuffer函数
CString strMfc = “test”;
std::string strStr;
strStr = strMfc.GetBuffer(0);

string转CString 例子:
CString strMfc;
string strStr = “test”;
strMfc = strStr.c_str();

MFC CString 转换为string

利用MFC进行打开文件时,需要将文件路径类型为CString转换为从cv::string类型,然后直接就可以有imread读入图片,网上提供的主要有以下几种转换方式:
1、

CString cstr;
string str((LPCTSTR)cstr);

CString cstr;
sring str(cstr.GetBuffer());

CString cstr;
USES_CONVERSION;
string str(W2A(cstr));

经过试验编程部分如下:

CString strPathName;
CFileDialog ccFileDlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT,_T(“Image files(.png; .jpg;.bmp)|.png;.jpg;.bmp|All files(.)|.||”), NULL);
if (ccFileDlg.DoModal() == IDOK)
strPathName = ccFileDlg.GetPathName();
string name;
name=(LPCTSTR(strPathName));//方法1

//name = strPathName.GetBuffer(0); //方法2

//USES_CONVERSION;//方法3
//string name(W2A(strPathName));

结果发现,方法1和2出现如下问题,

本文利用的VS2013+OPENCV3.0,最后方法3可以正确运行;

理由是因为CString中是WCHAR,string里是char,类型不匹配;CString实际是CStringT, 也就是模板类, 它在UNICODE环境下, 实际是CStringW, 而在多字符集下是CStringA,而std::string就是多字符集的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值