1. 程式人生 > 其它 >c++ 資料型別轉化

c++ 資料型別轉化

技術標籤:字串c++演算法python資料結構

目錄[-]


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