C++中int類型按字節(jié)打印輸出的方法
前言
今天在項目編程中,遇到一個問題,u32類型的參數(shù),要賦值給一個u8 array[3],想用memcpy()函數(shù)進(jìn)行賦值,由于類型大小不一致,一時不知道怎么做,經(jīng)過查找,得以解決。說明如下;
項目是在內(nèi)網(wǎng)中做,在查找過程中用自己筆記本做了一下實驗,vs2013版本。
類似主題是int類型按字節(jié)打印數(shù)據(jù),sizeof(int)實驗驗證后為4字節(jié),就分別打印出這4個字節(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;
}
輸出:

以上是正確代碼
以下對代碼做改變
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類型是有符號字符型變量還是無符號字符型變量,要看編譯器是怎么定義的,不能想當(dāng)然。char變量為一個字節(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;即輸出一個十六進(jìn)制的整型,而在代碼中,%x對應(yīng)的是char類型,所以此時printf()函數(shù)會將char類型隱式轉(zhuǎn)換為int類型。
對于int類型的對象,其值為-128,則其對應(yīng)的內(nèi)存值是0xFFFFFF80
所以,在printf()函數(shù)中,char類型隱式轉(zhuǎn)換成int類型后,輸出就會變成4字節(jié)的0xFFFFFF80
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。
相關(guān)文章
C語言結(jié)構(gòu)體(struct)的詳細(xì)講解
C語言中,結(jié)構(gòu)體類型屬于一種構(gòu)造類型(其他的構(gòu)造類型還有:數(shù)組類型,聯(lián)合類型),下面這篇文章主要給大家介紹了關(guān)于C語言結(jié)構(gòu)體(struct)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03
C++實現(xiàn)CreatThread函數(shù)主線程與工作線程交互的方法
這篇文章主要介紹了C++實現(xiàn)CreatThread函數(shù)主線程與工作線程交互的方法,是Windows應(yīng)用程序設(shè)計中非常實用的方法,需要的朋友可以參考下2014-10-10
Linux vmstat命令實戰(zhàn)詳細(xì)解析
這個命令是我查看Linux/Unix最喜愛的命令,一個是Linux/Unix都支持,二是相比top,我可以看到整個機(jī)器的CPU,內(nèi)存,IO的使用情況,而不是單單看到各個進(jìn)程的CPU使用率和內(nèi)存使用率(使用場景不一樣)2013-09-09

