Chinaunix首页 | 论坛 | 博客
  • 博客访问: 690738
  • 博文数量: 148
  • 博客积分: 4086
  • 博客等级: 上校
  • 技术积分: 1766
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-06 23:27
文章分类

全部博文(148)

文章存档

2013年(19)

2012年(9)

2011年(106)

2009年(14)

分类: C/C++

2011-10-31 12:25:12

最近做项目用到c++,才发现c++中的数据类型不是一般的BT。尤其是我和婷还是分开操作的。我写底层,用的是WIN32控制台;而婷写MFC。由于没有经验,所以没有写中间的转换程序。当集成时,类型转换特别麻烦。以下都是我收集的类型转换的方法和一些经验,供大家参考。欢迎补充~~

1. char* to string
string s(char *); 
注:在不是初始化的地方最好用assign().
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2. string to const char*
string a="strte";
const char* r=a.c_str();
注意是const的。还要转到char*:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2.2. const char* to char*
const char* r="123";
char   *p1   =   new   char[strlen(r)+1];
strcpy(p1,r);
附:http://hi.baidu.com/cfans/blog/item/06970ef4b671f366dcc4745d.html
 这个页面是具体讲述区别的。
·············································································································
3. cstring to string
vs2005 Unicode下:
  CStringW   str(L"test");  
  CStringA   stra(str.GetBuffer(0));  
  str.ReleaseBuffer();      
  std::string   strs   (stra.GetBuffer(0));  
  stra.ReleaseBuffer();

非Unicode下:
CString cs("test");
std::string str=cs.getBuffer(0);
cs.ReleaseBuffer();

注:GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.
++++++++++++++++++++++++++++++++++++++++++++++++++++
4. double ,int to string
#include
using namespace std;

stringstream ss;
string result;
long n=11111;
stream << n; //从long型数据输入
stream >>result; //转换为 string


===================================================

5.char*  to int, double ,long

char *s; double x; int i; long l;

s = " -2309.12E-15"; /* Test of atof */
x = atof( s );
printf( "atof test: ASCII string: %s\tfloat: %e\n", s, x );

s = "7.8912654773d210"; /* Test of atof */
x = atof( s );
printf( "atof test: ASCII string: %s\tfloat: %e\n", s, x );

s = " -9885 pigs"; /* Test of atoi */
i = atoi( s );
printf( "atoi test: ASCII string: %s\t\tinteger: %d\n", s, i );

s = "98854 dollars"; /* Test of atol */
l = atol( s );
printf( "atol test: ASCII string: %s\t\tlong: %ld\n", s, l );
------------------------------------------------------------------------------------------------
6. string to int ,long ,double            
              int s;
 string str="123";
 stringstream ss;
 ss< ss>>s;//输出到int
 ss.clear();


——————————————————————————————————————————
7. date to string
#include

char dateStr [9];
char timeStr [9];
 _strdate( dateStr);
printf( "The current date is %s \n", dateStr);
_strtime( timeStr );
printf( "The current time is %s \n", timeStr);

--------实践证明是正确的版本--------------------------------------------------------------
#include
#include
#include
 
int main()
{
     //Find the current time
     time_t curtime = time(0);
     
      //convert it to tm
      tm now=*localtime(&curtime);
    
     //BUFSIZ is standard macro that expands to a integer constant expression
     //that is greater then or equal to 256. It is the size of the stream buffer
     //used by setbuf()
     char dest[BUFSIZ]={0};
    
     //Format string determines the conversion specification's behaviour
     const char format[]="%A, %B %d %Y. The time is %X";
    
     //strftime - converts date and time to a string
     if (strftime(dest, sizeof(dest)-1, format, &now)>0)
       std::cout<     else
       std::cerr<<"strftime failed. Errno code: "<}

|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
8.string to cstring

+++++++++++++++++++++++++++++++++++++++++++++++++++++
非Unicode下:
int 转 CString
CString.Format("%d",int);
...............................
string 转 CString 
CString.format("%s", string.c_str()); 
c_str()确实比data()要好. 
.......................................
char* 转 CString 
CString.format("%s", char*); 
 CString strtest; 
 char * charpoint; 
 charpoint="give string a value"; 
 strtest=charpoint; //直接付值
.....................................................
CString 转 int
 CString  ss="1212.12"; 
 int temp=atoi(ss); //atoi _atoi64或atol
...................................................................................................................................
9.在Unicode下的CString to double
CSting sTemp("123.567");
double dTemp = _wtof(sTemp.GetString());

阅读(7256) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~