CString 与folat int char * CTime string等的互相转变

2024-04-27 22:18

本文主要是介绍CString 与folat int char * CTime string等的互相转变,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

CString 与folat int char * CTime string等的互相转变 

本文 总结了如何实现CString 与folat   int   char *   CTime  string等的互相转变方法。

      CString 是一种很特殊的 C++ 对象,它里面包含了三个值:一个指向某个数据缓冲区的指针、一个是该缓冲中有效的字符记数(它是不可存取的,是位于 CString 地址之下的一个隐藏区域)以及一个缓冲区长度。 有效字符数的大小可以是从0到该缓冲最大长度值减1之间的任何数(因为字符串结尾有一个NULL字符)。字符记数和缓冲区长度被巧妙隐藏。

1. CString 与 float 的转变

1) CString 转变为float

    CString strContent;

    float fNum;

   fNum=atof(strContent);

2)float 转变为CString

     CString   strContent;  
     float   fNum;  
    strContent.format("%f",fNum);

2. CString 与int 的转变

1)CString转变为int

   CString strContent;

    int nNum;

   nNum=atoi(strContent);

2) int 转变为CSting

    CString   strContent;  
     int nNum;  
    strContent.format("%d",nNum);

3. CString与char *的转变

   1)CString转变为 char *
   方法一,使用强制转换。例如:

        CString strString;
        LPTSTR lpsz =(LPTSTR)(LPCTSTR)strString;

  方法二,使用strcpy。例如:

        CString strString;
        LPTSTR lpsz = new TCHAR[strString.GetLength()+1];
         _tcscpy(lpsz, strString);

  需要说明的是,strcpy(或可移值的_tcscpy)的第二个参数是 const wchar_t* (Unicode)或const char* (ANSI),系统编译器将会自动对其进行转换。

  方法三,使用CString::GetBuffer。
    CString   strContent;  
    char*   pcContent;  
   
    pcContent=strContent.GetBuffer(strContent.GetLength());  
    strContent.ReleaseBuffer();
    如果你需要修改 CString 中的内容,它有一个特殊的方法可以使用,那就是 GetBuffer,它的作用是返回一个可写的缓冲指针。
    在 GetBuffer 和 ReleaseBuffer 之间这个范围,一定不能使用你要操作的这个缓冲的 CString 对象的任何方法。

因为 ReleaseBuffer 被调用之前,该 CString 对象的完整性得不到保障。
   
   2) char *转变为 CString
   将char*转换成CString,除了直接赋值外,还可使用CString::Format进行。
    char *pcArray;
    CString strContent;
    strContent.Format(_T("%s"), pcArray);
       

 

4. CString CTime

1) CTime转变为CStirng:  
   
  CTime   t;  
  t.GetCurrentTime();  
  CString   s=t.Format("%Y-%B-%d");
   
 2)CString转变为 CTime:  
   
  CString   s("2007-9-14   19:06:23");  
  int   nYear,   nMonth,   nDate,   nHour,   nMin,   nSec;  
  sscanf(s,   "%d-%d-%d   %d:%d:%d",   &nYear,   &nMonth,   &nDate,   &nHour,   &nMin,   &nSec);  
  CTime   t(nYear,   nMonth,   nDate,   nHour,   nMin,   nSec);

5. CString string

 1) CString 转变为string
 CString   strContent;  
  string   str1(strContent.GetString()   );  
  str1=strContent.GetString();
 
  2)string转变为CString
  string   str1;  
  CString  strContent(str1.c_str()   );  
  strContent =   str1.c_str();   
因为 ReleaseBuffer 被调用之前,该 CString 对象的完整性得不到保障。
   
   2) char *转变为 CString
   将char*转换成CString,除了直接赋值外,还可使用CString::Format进行。
    char *pcArray;
    CString strContent;
    strContent.Format(_T("%s"), pcArray);
       

 

4. CString CTime

1) CTime转变为CStirng:  
   
  CTime   t;  
  t.GetCurrentTime();  
  CString   s=t.Format("%Y-%B-%d");
   
 2)CString转变为 CTime:  
   
  CString   s("2007-9-14   19:06:23");  
  int   nYear,   nMonth,   nDate,   nHour,   nMin,   nSec;  
  sscanf(s,   "%d-%d-%d   %d:%d:%d",   &nYear,   &nMonth,   &nDate,   &nHour,   &nMin,   &nSec);  
  CTime   t(nYear,   nMonth,   nDate,   nHour,   nMin,   nSec);

5. CString string

 1) CString 转变为string
 CString   strContent;  
  string   str1(strContent.GetString()   );  
  str1=strContent.GetString();
 
  2)string转变为CString
  string   str1;  
  CString  strContent(str1.c_str()   );  
  strContent =   str1.c_str();   

这篇关于CString 与folat int char * CTime string等的互相转变的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/941679

相关文章

string字符会调用new分配堆内存吗

gcc的string默认大小是32个字节,字符串小于等于15直接保存在栈上,超过之后才会使用new分配。

MFC中App,Doc,MainFrame,View各指针的互相获取

纸上得来终觉浅,为了熟悉获取方法,我建了个SDI。 首先说明这四个类的执行顺序是App->Doc->Main->View 另外添加CDialog类获得各个指针的方法。 多文档的获取有点小区别,有时间也总结一下。 //  App void CSDIApp::OnApp() {      //  App      //  Doc     CDocument *pD

Jasperreports+jaspersoft studio学习教程(七)- 子报表Subreport(父子报表互相传值)

转载:https://blog.csdn.net/shiyun123zw/article/details/79221708 有很多人都说Jasperreports不适合中国式复杂报表,实际上运用好父子报表可以解决大部分问题了。例如下面的表。每个学生的学科数目不固定,且每个学生后有相当于小计的平均分。有点复杂度的报表,可以使用子报表解决。 8.1 设计报表模板 8.1.1 新建主模板De

hdu2072(string的应用)

单词数 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 25447    Accepted Submission(s): 5957 Problem Description lily的好朋友xiaoou333最近很空,他

【UVA】10739 - String to Palindrome(动态规划)

比较水的动态规划 dp[i][j] 将原串 i ~ j 之内的字符转化为回文字符所需要的最小操作次数 其中删除操作和添加操作本质上是一样的。 三个状态转移方程: dp[i][j] = min(dp[i][j] ,dp[i + 1][j]); dp[i][j] = min(dp[i][j] ,dp[i + 1][j - 1]); dp[i][j] = min(dp[i][j] ,dp[

理解String的compareTo()方法返回值

compareTo()的返回值是整型,它是先比较对应字符的大小(ASCII码顺序), 如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的差值。 如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符作比较, 以此类推,直至比较的字符或被比较的字符有一方全比较完,这时就比较字符的长度。 我们可以通过阅读源码加深对compareTo()的理解: comp

【JavaScript】基本数据类型与引用数据类型区别(及为什么String、Boolean、Number基本数据类型会有属性和方法?)

基本数据类型   JavaScript基本数据类型包括:undefined、null、number、boolean、string。基本数据类型是按值访问的,就是说我们可以操作保存在变量中的实际的值。 1)基本数据类型的值是不可变的 任何方法都无法改变一个基本类型的值,比如一个字符串: var name = "change";name.substr();//hangconsole.log

leetcode#541. Reverse String II

题目 Given a string and an integer k, you need to reverse the first k characters for every 2k characters counting from the start of the string. If there are less than k characters left, reverse all of

Oracle之用TO_CHAR函数将日期格式转化为不带前导零的月份和日

要求: 1、日期格式转化成字符串格式,月和日前面的0需要去掉,如日期2024-09-06需要转化成2024-9-6; 2、如果用截取拼接函数写法就会复杂,最好用TO_CHAR函数格式化实现。 正确写法: SELECT TO_CHAR(SYSDATE,'YYYY-fmMM-dd') AS DATE1 , -- 执行结果为 2024-9-6TO_CHAR(SYSDATE,'fmYYYY-MM-d

Java中Map取值转String Null值处理

Map<String, Object> 直接取值转String String value = (String)map.get("key") 当map.get(“key”)为Null值时会报错。 使用String类的valueOf静态方法可以解决这个问题 String value = String.valueOf(map.get("key"))