代码改变世界

常用类型的转换

2018-05-28 23:22  清晨、午后  阅读(192)  评论(0编辑  收藏  举报

1.1 char 转 int、double、等 

同样, 可以使用 stol(long), stof(float), stod(double) 等

char *pcnum = “1232”;
int num = 0;
num = atoi(pcnum );

1.2 std::string转 int、double、等 

std::string str = "123";  
int i = std::stoi(str);  

1.3 std::string转char*

c_str()函数

std::string str = "string";  
const char *cstr = str.c_str();  

data() 函数

string str("adfd");
char *cha = str.data();

 1.4char* 转std::string

char *cstr = "ssss";
std::string str1 = cstr;

1.5 char* 与 char[] 互转

char *pcstr = "sdss";
char cstr[8] = {0};
strncpy(cstr, pcstr, 8);

 

substr() 字符串截取

string s = "0123456789";

string sub1 = s.substr(5); //只有一个数字5表示从下标为5开始一直到结尾:

sub1 = "56789" string sub2 = s.substr(5, 3); //从下标为5开始截取长度为3位:

sub2 = "567"

2四种格式化输出区别

 printf,fprintf,sprintf,snprintf 都是格式化输出命令,它们的用法与区别可以通过Linux中命令“man printf”来查看。 
int printf(const char *format,***)   //将格式输出到标准输出设备stdout
int fprintf(FILE *steam,const char *format,***)    //格式化输出到文件流中,即写入文件 
int sprintf(char *str,const char *format,***)    //格式化输出到字符串str中,注意此时需要预先给str分配足够大的空间。sprintf最常用的场景是将整数转换为字符串,可替代atoi函数。 
int snprintf(char *str,size_t n,const char *format,*** )  //linux.格式化输出到字符串str中,但是只写入长度为 n-1 的输出。
int _snprintf(char *str,size_t n,const char *format,*** )  //vs.格式化输出到字符串str中,但是只写入长度为 n 的输出。

注意:

VC中的_snprintf的count参数表示,会向buff中写入count个字符,不包括'\0'字符,并且不会在字符串末尾添加'\0'符,并且,如果字符串超过count,函数返回-1以标志可能导致的错误;
gcc中的snprintf函数的count参数表示,向buff中写入count个字符,包括'\0'字符,并且,返回实际的字符串长度.
snprintf是C语言提供的字符串格式化函数,int snprintf ( char * restrict dest , size_t n , const char * restrict format , ... );

_snprintf是vc提供的字符串格式化函数,int _snprintf( char *buffer, size_t count, const char *format , ...);

 

2.1.格式化输出时的注意事项

  sprintf()在转换整数时,需考虑输出数的格式,如

sprintf(str,"%4x",-1);

str的值是多少呢?时间测试会发现,str为FFFFFFFF而不是4位宽的FFFF。因为函数参数在入栈计算机并不知道-1是32位的还是16位的,就会按照 32位来存储,并且高位是符号位扩展,当格式化输出时,4位宽不够,就会自动补到32位,所以正确的形式应是:

sprintf(str,"%4x",(unsigned short)-1);

同理,若是输出整数以浮点数格式输出,写作:

sprintf(str,"%5.3x",3);

则最终str为0.000,因为计算机存储3时是按整数形式存储,按浮点数输出必然出错。应为

sprintf(str,"%5.3x",(float)3);

 前面补0

int i = 1;
char dd[4] = {0};
sprintf(dd, "%02d", i);    //dd的值为“01”

 

2.2格式说明符

 

...