C++中int類型按字節(jié)打印輸出的方法
前言
今天在項(xiàng)目編程中,遇到一個(gè)問(wèn)題,u32類型的參數(shù),要賦值給一個(gè)u8 array[3],想用memcpy()函數(shù)進(jìn)行賦值,由于類型大小不一致,一時(shí)不知道怎么做,經(jīng)過(guò)查找,得以解決。說(shuō)明如下;
項(xiàng)目是在內(nèi)網(wǎng)中做,在查找過(guò)程中用自己筆記本做了一下實(shí)驗(yàn),vs2013版本。
類似主題是int類型按字節(jié)打印數(shù)據(jù),sizeof(int)實(shí)驗(yàn)驗(yàn)證后為4字節(jié),就分別打印出這4個(gè)字節(jié)中的數(shù)值。
先貼上代碼
#include<iostream> using namespace std; int main() { int i = 128; cout << sizeof(int) << endl; unsigned char* cc = (unsigned char*)&i; for (int j = 0; j < 4; j++) printf("cc: %p \t *cc: %x\n", cc + j, *(cc + j)); system("pause"); return 0; }
輸出:
以上是正確代碼
以下對(duì)代碼做改變
unsigned char* cc = (unsigned char*)&i; 改為 char* cc = ( char*)&i; //代碼如下: #include<iostream> using namespace std; int main() { int i = 128; cout << sizeof(int) << endl; char* cc = ( char*)&i; for (int j = 0; j < 4; j++) printf("cc: %p \t *cc: %x\n", cc + j, *(cc + j)); system("pause"); return 0;
輸出:
輸出為什么是ffffff80呢?
char類型是有符號(hào)字符型變量還是無(wú)符號(hào)字符型變量,要看編譯器是怎么定義的,不能想當(dāng)然。char變量為一個(gè)字節(jié),8bit,sighed char表示的范圍是-128~127,(-128在內(nèi)存中二進(jìn)制表示為1000 0000,127在內(nèi)存中二進(jìn)制表示為0111 1111),unsighed char表示的范圍是0~255.
給 i 賦值128,十六進(jìn)制0x80,二進(jìn)制1000 0000,相當(dāng)于是給char變量賦值-128.
printf()函數(shù)的參數(shù)%x其含義為Unsigned hexadecimal integer;即輸出一個(gè)十六進(jìn)制的整型,而在代碼中,%x對(duì)應(yīng)的是char類型,所以此時(shí)printf()函數(shù)會(huì)將char類型隱式轉(zhuǎn)換為int類型。
對(duì)于int類型的對(duì)象,其值為-128,則其對(duì)應(yīng)的內(nèi)存值是0xFFFFFF80
所以,在printf()函數(shù)中,char類型隱式轉(zhuǎn)換成int類型后,輸出就會(huì)變成4字節(jié)的0xFFFFFF80
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
C語(yǔ)言菜鳥(niǎo)基礎(chǔ)教程之自定義函數(shù)
自定義函數(shù): 必須直接或間接在main中調(diào)用,否則該自定義函數(shù)不會(huì)被執(zhí)行。 返回值類型 函數(shù)名(參數(shù)類型 參數(shù)名,參數(shù)類型 參數(shù)名...)2017-10-10C語(yǔ)言實(shí)現(xiàn) 數(shù)據(jù)類型占多少字節(jié)指針占多少字節(jié)
這篇文章主要介紹了 C語(yǔ)言 數(shù)據(jù)類型占多少字節(jié)指針占多少字節(jié)的實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09HDOJ 1443 約瑟夫環(huán)的最新應(yīng)用分析詳解
本篇文章是對(duì)HDOJ 1443 約瑟夫環(huán)的最新應(yīng)用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05探討register關(guān)鍵字在c語(yǔ)言和c++中的差異
建議不要用register關(guān)鍵字定義全局變量,因?yàn)槿肿兞康纳芷谑菑膱?zhí)行程序開(kāi)始,一直到程序結(jié)束才會(huì)終止,而register變量可能會(huì)存放在cpu的寄存器中,如果在程序的整個(gè)生命周期內(nèi)都占用著寄存器的話,這是個(gè)相當(dāng)不好的舉措2013-10-10C++超詳細(xì)講解強(qiáng)制類型轉(zhuǎn)換
在C++語(yǔ)言中新增了四個(gè)關(guān)鍵字static_cast、const_cast、reinterpret_cast和dynamic_cast。這四個(gè)關(guān)鍵字都是用于強(qiáng)制類型轉(zhuǎn)換的2022-05-05