目录[-]


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_;
}