2011-06-18 128 views
-5

我在C下面的例子:如何字符轉換爲十六進制和二進制

int x = 123; 

size of int = 4 bytes. 
hex value = 7b 
binary value = 0111 1011 

什麼將是十六進制/二進制值,如果我的X是一個char?

char x = 123; 
size of char = 1 byte. 
hex value = ?? 
binary value = ?? 

回答

2

由於char小於int,這將是相同的。除了前導零可以在int中找到。

試試這個:

6 int x = 123; 
    7 
    8 printf ("Size of int is %d bytes\n", sizeof(int)); 
    9 printf ("Size of char is %d byte\n", sizeof(char)); 
10 
11 printf ("Hex value is %x\n", x); 
12 printf ("Hex value is %x\n", (char)x); 
13 
14 printf ("As for binary value .... google is your friend\n"); 

輸出是:

Size of int is 4 bytes 
Size of char is 1 byte 

Hex value is 7b 
Hex value is 7b 

至於二進制值....谷歌是你的朋友 這site似乎解釋了事情做好

0

十進制123無論原始類型如何,它都是十六進制的0x7b和二進制的0111 1011。類型唯一的方式是溢出(例如,int x = 48273; char y = (char)x;)。偶爾,顯示signed charunsigned char可能會有所不同。

+0

當我運行我的程序時,我得到了。 char x = 123; printf(「Before%x \ n」,x);不過,我會假設char = 1字節和1字節= 8位。 char x = 123;二進制不會是0111 1011。因爲這是8位。 – Gene

+1

@Gene你爲什麼這樣認爲? – nos

1

它的十六進制和二進制值將完全相同(除了可能的前導零,如果你想擴展到全尺寸)。

這是因爲123很適合char。一個帶符號的char至少可以包含-127127(兩個補碼可以處理-128,但ISO標準允許補碼和符號/幅度作爲負數的其他兩種編碼,兩者都不能處理-128),一個無符號字符至少0255

假設一個8位字節和4字節INT:

Value HexInt HexChar     BinaryInt     BinaryChar 
----- ------ ------- --------------------------------------- ---------- 
123  7B  7B  0000 0000 0000 0000 0000 0000 0111 1011 0111 1011 

二進制值0111 1011被計算爲:

0111 1011 
||| | || 
||| | |+- 1 
||| | +-- 2 
||| | 
||| +---- 8 
||+------ 16 
|+------- 32 
+-------- 64 
      === 
      123 

如果要嘗試將值放入一個8位大於8位的位char,最低有效位通常是保存的位。

char xyz = 0x1234; // results in xyz being given the value 0x34. 

這在C99中詳細說明,部分6.3.1.3/2/3

1 /當與整數類型的值被轉換爲比_Bool其他,另一個整數類型,如果該值可以由表示新的類型,它是不變的。 2 /否則,如果新類型是無符號的,則通過重複地增加或減去比新類型中可以表示的最大值多一個值來轉換該值,直到該值在新類型的範圍內爲止。

3 /否則,新類型被簽名並且值不能在其中表示;結果是實現定義的或實現定義的信號被引發。

+0

謝謝大家。我打算用一個更大的例子。其中char = 1234,超過8位。你們解釋了它。看來解決方案將是十六進制= 0x4D2和二進制= 11010001。前4位被丟棄。 0001 – Gene

0

這將是相同的。 0x7b十六進制,0111 1011

請注意,如果您的整數是4個字節,則它的位爲0000 0000 0111 1011。

相關問題