C++中int類型按字節打印輸出的方法

這篇文章主要給大家介紹了關於C++中int類型按字節打印輸出的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用C++具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

前言

今天在項目編程中,遇到一個問題,u32類型的參數,要賦值給一個u8 array[3],想用memcpy()函數進行賦值,由於類型大小不一致,一時不知道怎麼做,經過查找,得以解決。說明如下;

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

類似主題是int類型按字節打印數據,sizeof(int)實驗驗證後爲4字節,就分別打印出這4個字節中的數值。

先貼上代碼

#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變量爲一個字節,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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對神馬文庫的支持。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章