目录[-]
1、数据类型转换(数字类型到字符串类型)
cpp中引入了流的概念,同时我们也可以使用流来进行数据转换,<sstream>主要用来进行数据类型转换,相比c中的数据类型转换,其没有数据溢出的风险,同时由于目标对象的类型会被自动推导出来,所以也更为安全。
#include <string>
#include <iostream>
#include <sstream>
using namespace std;
int main(){
int age = 99;
string strAge;
stringstream ss;
ss<<age;
ss>>strAge;
}
2、数据类型转换(字符串类型到数字类型)
#include <string>
#include <iostream>
#include <sstream>
using namespace std;
int main(){
string strAge = "99";
int age;
stringstream ss ;
ss<<strAge;
ss>>age;
}
3、判断字符串是否为16进制数值类型
• isxdigit(char c_)
隶属于ctype.h标准函数库,通过该函数可以判断输入字符是否为16进制字符:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,a,b,c,d,e,f。
#include <stdio.h>
#include <ctype.h>
bool charArrayIs0xDigit(char* pChar_,char number_){
for (char i=0;i<number_-1;i++){
if(!isxdigit(*(pChar_+i))){
return false;
}else if (i<number_) {
continue;
}else{
return true;
}
}
return true;
}
int main()
{
char var1[] = "01e1";
char var2[] = "0x1s1";
bool is0xdigit=charArrayIs0xDigit(var1, sizeof(var1));
printf("%d\n",is0xdigit);
is0xdigit=charArrayIs0xDigit(var2, sizeof(var2));
printf("%d\n",is0xdigit);
return 1;
}
4、判断字符串是否为10进制数值类型
• isxdigit(char c\_)
隶属于ctype.h标准函数库,通过该函数可以判断输入字符是否为16进制字符:0,1,2,3,4,5,6,7,8,9。
#include <stdio.h>
#include <ctype.h>
bool charArrayIsDigit(char* pChar_,char number_){
for (char i=0;i<number_-1;i++){
if(!isdigit(*(pChar_+i))){
return false;
}else if (i<number_) {
continue;
}else{
return true;
}
}
return true;
}
int main()
{
char var1[] = "19";
char var2[] = "01A";
bool isdigit_=charArrayIsDigit(var1, sizeof(var1));
printf("%d\n",is0xdigit);
isdigit_=charArrayIsDigit(var2, sizeof(var2));
printf("%d\n",isdigit_);
return 1;
}
5、将10进制整数转化为16进制字符串
std::string DecIntToHexStr(long long num)
{
string str;
long long Temp = num / 16;
int left = num % 16;
if (Temp > 0)
str += DecIntToHexStr(Temp);
if (left < 10)
str += (left + '0');
else
str += ('A' + left - 10);
return str;
}
6、将10进制字符串转化为16进制字符串
std::string DecStrToHexStr(std::string str)
{
long long Dec = 0;
for (int i = 0; i < str.size(); ++i)
Dec = Dec * 10 + str[i] - '0';
return DecIntToHexStr(Dec);
}
7、将16进制字符转化为16进制数值
int char2dec(unsigned char num){
if(num == 'A') return 10;
else if(num == 'B') return 11;
else if(num == 'C') return 12;
else if(num == 'D') return 13;
else if(num == 'E') return 14;
else if(num =='F') return 15;
else return num-48;
}
8、将4个字符组成的字符串转化为Int整数
uint16_t FourHexStrToDecUInt(std::string str){
for(unsigned char i = 0 ; i< str.length(); i++){
return (char2dec(str[0])*16 + char2dec(str[1])) * 256 + char2dec(str[2])*16+ char2dec(str[3]);
}
}
9、将数值转化成16进制字符串
std::string dec2hex(int i)
{
stringstream ioss; //定义字符串流
string s_temp; //存放转化后字符
ioss << setiosflags(ios::uppercase) << hex << i; //以十六制(大写)形式输出
//ioss << resetiosflags(ios::uppercase) << hex << i; //以十六制(小写)形式输出//取消大写的设置
ioss >> s_temp;
if (s_temp.length()%2 != 0) s_temp = "0" + s_temp;
return s_temp;
}
10、将当前系统时间转化成16进制数据格式
#include <time.h>
std::string get_time_hex_sgmw(){
time_t timep;
struct tm *p;
time(&timep); /*获得time_t结构的时间,UTC时间*/
p = localtime(&timep); /*转换为struct tm结构的UTC时间*/
int year_ = 1900 + p->tm_year;
int year_big__ = year_ / 100;
int year_small__ = year_ % 100 ;
int month_ = (p->tm_mon) + 1;
int day_ = p->tm_mday;
int hour_ = p->tm_hour;
int minute_ = p->tm_min;
int second_ = p->tm_sec;
std::string data_time_ = dec2hex(year_big__) +dec2hex(year_small__) + dec2hex(month_) + dec2hex(day_) + dec2hex(hour_) + dec2hex(minute_) + dec2hex(second_);
return data_time_;
}