C++中int類型按字節(jié)打印輸出的方法
前言
今天在項目編程中,遇到一個問題,u32類型的參數(shù),要賦值給一個u8 array[3],想用memcpy()函數(shù)進行賦值,由于類型大小不一致,一時不知道怎么做,經(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類型是有符號字符型變量還是無符號字符型變量,要看編譯器是怎么定義的,不能想當然。char變量為一個字節(jié),8bit,sighed char表示的范圍是-128~127,(-128在內(nèi)存中二進制表示為1000 0000,127在內(nèi)存中二進制表示為0111 1111),unsighed char表示的范圍是0~255.
給 i 賦值128,十六進制0x80,二進制1000 0000,相當于是給char變量賦值-128.
printf()函數(shù)的參數(shù)%x其含義為Unsigned hexadecimal integer;即輸出一個十六進制的整型,而在代碼中,%x對應的是char類型,所以此時printf()函數(shù)會將char類型隱式轉(zhuǎn)換為int類型。
對于int類型的對象,其值為-128,則其對應的內(nèi)存值是0xFFFFFF80
所以,在printf()函數(shù)中,char類型隱式轉(zhuǎn)換成int類型后,輸出就會變成4字節(jié)的0xFFFFFF80
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。
相關(guān)文章
C++實現(xiàn)CreatThread函數(shù)主線程與工作線程交互的方法
這篇文章主要介紹了C++實現(xiàn)CreatThread函數(shù)主線程與工作線程交互的方法,是Windows應用程序設(shè)計中非常實用的方法,需要的朋友可以參考下2014-10-10

