c++ 資料型別轉化
阿新 • • 發佈:2020-12-18
目錄[-]
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_;
}