int型別按位元組列印輸出

2022-07-31 04:00:16 字數 1492 閱讀 4436

今天在專案程式設計中,遇到乙個問題,u32型別的引數,要賦值給乙個u8 array[3],想用memcpy()函式進行賦值,由於型別大小不一致,一時不知道怎麼做,經過查詢,得以解決。說明如下;

專案是在內網中做,在查詢過程中用自己筆記本做了一下實驗,vs2013版本。

類似主題是int型別按位元組列印資料,sizeof(int)實驗驗證後為4位元組,就分別列印出這4個位元組中的數值。

先貼上**

#includeusing namespace std;

int main()

輸出:

以上是正確**

以下對**做改變

unsigned char* cc = (unsigned char*)&i;

改為 char* cc = ( char*)&i;

//**如下:

#includeusing 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變數為乙個位元組,8bit,sighed char表示的範圍是-128~127,(-128在記憶體中二進位制表示為1000 0000,127在記憶體中二進位制表示為0111 1111),unsighed char表示的範圍是0~255.

給 i 賦值128,十六進製制0x80,二進位制1000 0000,相當於是給char變數賦值-128.

printf()函式的引數%x其含義為unsigned hexadecimal integer;即輸出乙個十六進製制的整型,而在**中,%x對應的是char型別,所以此時printf()函式會將char型別隱式轉換為int型別。

對於int型別的物件,其值為-128,則其對應的記憶體值是0xffffff80

所以,在printf()函式中,char型別隱式轉換成int型別後,輸出就會變成4位元組的0xffffff80

列印輸出部門結構

列印出部門結構 如下 連線資料庫,並且獲取資料。link mysqli connect localhost mysqli select db link,test sql select from print where 1 retval mysqli query link,sql array arra...

Linux shell之列印輸出

經常需要和shell命令打交道,但是一直沒有系統的學習,接下來會花1到2個月的時間系統的學習一下shell命令,接下來就開啟shell命令的奇妙旅行吧。本章主要介紹shell的列印輸出。知識要點 格式替代符 有一些常用的格式替代符會經常在列印輸出中被用到,格式替代符只能用在printf輸出中。5s ...

N N矩陣螺旋列印輸出

例 1 2 3 4 5 6 7 8 9 輸出為如下結果 1 4 7 8 9 6 3 2 5 private void button1 click object sender,eventargs e console.writeline console.writeline this.printarray...