关于CString之间赋值的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于CString之间赋值的问题相关的知识,希望对你有一定的参考价值。

现在有一个CString的变量,比如取名字叫allstr,取值为
(390.0 392.0 392.0 380.0 219.0 219.0 219.0 013 019 014 50.0 433.0 42.0 00000000 242.17 100 00 00 00 00 00 00000000 01
我想将对应的值显示到对话框的edit框中
edit框变量比如取名字叫m_a,m_b,m_c等,也是CString的变量
希望通过在allstr中取值让m_a=390.0,m_b=392.0,m_c =380.0
大家有什么简单的好方法?比如是CString的函数之类的
还有怎样把CString的m_a转成float变量a的好方法呢?
望不吝赐教

参考技术A 哦 这样的话 你可以试试 CString.Find(" ");函数 意思是在CString中寻找空格字符 找到了 你再寻找第二个空格 再把两个空格之间的字串赋值给m_a及其它
float a = atof(m_a);
参考技术B 可以使用sscanf。
sscanf(allstr,"%f%f%f...",m_a,m_b,m_c,...);
就像scanf一样使用即可。本回答被提问者采纳
参考技术C 不是很理解你的想法,你想怎样通过allstr让m_a、m_b、m_c取值? 是想通过搜索查找allstr里的字串,还是怎么的

字符串转化为数值可以用 atof()标准库函数。

关于CString与VARIANT(CComVariant)之间的转化

一、VARIANT、CComVariant类与CString是什么:

CString是MFC定义的字符串类,VARIANT是COM标准为了使COM组件能够被各种语言使用(vc++、vb、java、python等)而规定的一种统一型变量。即VARIANT能够转化成载体语言规定的变量类型,载体语言的变量类型也可以转化成VARIANT类型。

CComVariant类对VARIANT进行了类封装,并提供了操作方法。实际保存数据的仍然是CComVariant类封装的VARIANT变量。

由于VARIANT实际上是一个Struct结构体,而实际上Struct结构体和Class是同一种数据类型,因此可以说CComVariant类是VARIANT的子类,因此两者赋值的方法是一样的(区别在于CComVariant封装了一些方法:复制,清空,删除变量,类型转化等)。

二、VARIANT、CComVariant类初始化:

初始化用法:

VARIANT var;

var.vt=VT_BSTR; //vt属性定义VARIANT类型

var.bstrVar=_T("test text");//bstrVar是VT_BSTR类型对应的存值变量

如上文,VARIANT赋值的方法是先确定变量的类型,然后给相应变量赋值,CComVariant类也可以这样初始化,也可以通过类构造函数初始化。

vt取值可以为:VT_I2,VT_I4,VT_R4,VT_R8,VT_BSTR等,分别表示short,long,float,double,BSTR,对应的值分别存在iVal,lVal,fltVal,dblVal,bstrVar中。

具体可查询VARIANT结构的规定。

参考文献:https://blog.csdn.net/tangaowen/article/details/6553305

三、相互转化:

1.CString转VARIANT(CComVariant):

CString str=_T("test");

VARIANT var;

var.vt=VT_BSTR;

var.vstrVar=_bstr_t(str);//用MFC的_bstr_t类将CString字符串变量str包装后赋值即可。

2.VARIANT转CString

CString CSelectDlg::VariantToCString(VARIANT var)
{
      CString strValue;
     _variant_t var_t;
     _bstr_t bst_t;
     time_t cur_time;
     CTime time_value;
     COleCurrency var_currency;
     switch(var.vt)
    {
          case VT_EMPTY:
                 strValue=_T("");
                 break;
          case VT_UI1:
                 rValue.Format("%d",var.bVal);
                 break;
         case VT_I2:
                strValue.Format("%d",var.iVal);
                break;
         case VT_I4:
                strValue.Format("%d",var.lVal);
                break;
         case VT_R4:
                strValue.Format("%f",var.fltVal);
                break;
         case VT_R8:
                strValue.Format("%f",var.dblVal);
                break;
        case VT_CY:
                var_currency=var;
                strValue=var_currency.Format(0);
                break;
        case VT_BSTR:
                var_t=var;
                bst_t=var_t;
                strValue.Format ("%s",(const char*)bst_t);
                break;
        case VT_NULL:
                strValue=_T("");
                break;
        case VT_DATE:
                cur_time = (long)var.date;
                time_value=cur_time;
                strValue=time_value.Format("%A,%B%d,%Y");
                break;
        case VT_BOOL:
                strValue.Format("%d",var.boolVal );
                break;
                default: 
                strValue=_T("");
                break;
       }
       return strValue;

}
三、VARIANT内部结构
  1. typedef struct tagVARIANT   
  2. {  
  3.     VARTYPE vt;                             //存储数据类型  
  4.     unsigned short wReserved1;  
  5.     unsigned short wReserved2;  
  6.     unsigned short wReserved3;  
  7.     union   
  8.     {  
  9.         Byte bVal;                          // VT_UI1.  
  10.         Short iVal;                         // VT_I2.  
  11.         long lVal;                          // VT_I4.  
  12.         float fltVal;                       // VT_R4.  
  13.         double dblVal;                      // VT_R8.  
  14.         VARIANT_BOOL boolVal;               // VT_BOOL.  
  15.         SCODE scode;                        // VT_ERROR.  
  16.         CY cyVal;                           // VT_CY.  
  17.         DATE date;                          // VT_DATE.  
  18.         BSTR bstrVal;                       // VT_BSTR.  
  19.         DECIMAL FAR* pdecVal                // VT_BYREF|VT_DECIMAL.  
  20.         IUnknown FAR* punkVal;              // VT_UNKNOWN.  
  21.         IDispatch FAR* pdispVal;            // VT_DISPATCH.  
  22.         SAFEARRAY FAR* parray;              // VT_ARRAY|*.  
  23.         Byte FAR* pbVal;                    // VT_BYREF|VT_UI1.  
  24.         short FAR* piVal;                   // VT_BYREF|VT_I2.  
  25.         long FAR* plVal;                    // VT_BYREF|VT_I4.  
  26.         float FAR* pfltVal;                 // VT_BYREF|VT_R4.  
  27.         double FAR* pdblVal;                // VT_BYREF|VT_R8.  
  28.         VARIANT_BOOL FAR* pboolVal;         // VT_BYREF|VT_BOOL.  
  29.         SCODE FAR* pscode;                  // VT_BYREF|VT_ERROR.  
  30.         CY FAR* pcyVal;                     // VT_BYREF|VT_CY.  
  31.         DATE FAR* pdate;                    // VT_BYREF|VT_DATE.  
  32.         BSTR FAR* pbstrVal;                 // VT_BYREF|VT_BSTR.  
  33.         IUnknown FAR* FAR* ppunkVal;        // VT_BYREF|VT_UNKNOWN.  
  34.         IDispatch FAR* FAR* ppdispVal;      // VT_BYREF|VT_DISPATCH.  
  35.         SAFEARRAY FAR* FAR* pparray;        // VT_ARRAY|*.  
  36.         VARIANT FAR* pvarVal;               // VT_BYREF|VT_VARIANT.  
  37.         void FAR* byref;                    // Generic ByRef.  
  38.         char cVal;                          // VT_I1.  
  39.         unsigned short uiVal;               // VT_UI2.  
  40.         unsigned long ulVal;                // VT_UI4.  
  41.         int intVal;                         // VT_INT.  
  42.         unsigned int uintVal;               // VT_UINT.  
  43.         char FAR * pcVal;                   // VT_BYREF|VT_I1.  
  44.         unsigned short FAR * puiVal;        // VT_BYREF|VT_UI2.  
  45.         unsigned long FAR * pulVal;         // VT_BYREF|VT_UI4.  
  46.         int FAR * pintVal;                  // VT_BYREF|VT_INT.  
  47.         unsigned int FAR * puintVal;        //VT_BYREF|VT_UINT.  
  48.     };  
  49. }; 

_bstr_t的使用方法

以上是关于关于CString之间赋值的问题的主要内容,如果未能解决你的问题,请参考以下文章

关于CString与VARIANT(CComVariant)之间的转化

VC中char*与cstring型的转换

CString 赋值正在改变 GetLastError() 的值

C++问题,怎么把char数组以ASCII码赋值给CString

CString 赋值的区别

如何将CString赋值给char数组的其中一项