如果乙個int
型的變數值為5
,則若使用強制型別轉換或者使用memcpy,則相當於直接copy記憶體中的值,若列印,則會列印5對應的ascii值;而若使用函式轉換,則函式會操作記憶體轉為ascii值的5
,若列印,則直接為5
。
memcpy在一定程度上相當於強制型別轉換,但是可以制定拷貝的位元組大小,因此可能不會出現丟失資料,如大於256的時候,int強制轉char,複製低8位給char,其餘捨棄
例如:
#include #include #include // 不足4個位元組的前面補零
void int2char(int number, char* result, int length_send)
;char wid[5] = ;
char hei[5] = ;
recv(fd, len, 8, 0);
recv(fd, wid, 4, 0);
recv(fd, hei, 4, 0);
printf("length:%s\nclos:%s\nrows:%s\n", len, wid, hei);
length = atoi(len);
width = atoi(wid);
height = atoi(hei);
採用最原始的string, 然後按照十進位制的特點進行算術運算得到int,但是這種方式太麻煩,這裡不介紹了。
採用標準庫中atoi函式。對於其他型別也都有相應的標準庫函式,比如浮點型atof()
,long型atol()
等等。
string s = "12";
int a = atoi(s.c_str());
採用sstream標頭檔案中定義的字串流物件來實現轉換。
istringstream is("12"); //構造輸入字串流,流的內容初始化為「12」的字串
int i;
is >> i; //從is流中讀入乙個int整數存入i中`
採用標準庫中的to_string函式。
int i = 12;
cout << std::to_string(i) << endl;`
不需要包含任何標頭檔案,應該是在utility中,但無需包含,直接使用,還定義任何其他內建型別轉為string的過載函式,很方便。
採用sstream中定義的字串流物件來實現。
ostringstream os; //構造乙個輸出字串流,流內容為空
int i = 12;
os << i; //向輸出字串流中輸出int整數i的內容
cout << os.str() << endl; //利用字串流的str函式獲取流中的內容
字串流物件的str函式對於istringstream和ostringstream都適用,都可以獲取流中的內容。
string s = "12";
s.c_str()
const char*
是指向常量的指標,而不是指標本身為常量,可以不被初始化.該指標可以指向常量也可以指向變數,只是從該指標的角度而言,它所指向的是常量,通過該指標不能修改它所指向的資料.
const char*
是不能直接賦值到char*
的,這樣編譯都不能通過,理由:假如可以的話,那麼通過char*
就可以修改const char
指向的內容了,這是不允許的.所以char*
要另外開闢新的空間。
#include using namespace std;
void main(){
const char* cpc="abcde";
char* pc=new char[100];
strcpy(pc,cpc);
cout《直接賦值就可以了
const char* cpc;
char* pc="abcde";
cpc=pc;
const char* 和char* 之間的轉換 C C 型別轉換
include include using namespace std int main 程式的執行結果如下 註解 int a 相當於將浮點數a的位址的前sizeof int 個位元組當成int型的資料輸出。float a 1.0f在記憶體中的表示是0x3f800000,當 int a強制轉換時,會...
c c 型別轉換總結
1.複製 2.函式形參和實參結合 3.函式返回值返回時 4.if condition 語句 5.混合運算 觸發時機2 3本質上是複製。同1。1.複製操作 等號右邊型別 等號左邊型別。有四種情況 a 內建型別 內建型別 b 內建型別 自定義型別 在自定義型別中查詢相應的轉換建構函式,找到則呼叫裝換建構...
c c 強制型別轉換
q 什麼是c風格轉換?什麼是static cast,dynamic cast 以及 reinterpret cast?區別是什麼?為什麼要注意?a 轉換的含義是通過改變乙個變數的型別為別的型別從而改變該變數的表示方式。為了型別轉換乙個簡單物件為另乙個物件你會使用傳統的型別轉換操作符。比如,為了轉換乙...