常用类型的转换
Posted liyubo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用类型的转换相关的知识,希望对你有一定的参考价值。
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);
2.2格式说明符
...
以上是关于常用类型的转换的主要内容,如果未能解决你的问题,请参考以下文章