如何将char转换为十六进制和二进制

时间:2011-06-18 00:11:21

标签: c binary char hex

我在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 = ??

4 个答案:

答案 0 :(得分: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似乎可以很好地解释

答案 1 :(得分:1)

它的十六进制和二进制值将完全相同(如果你想将它扩展到完整大小,可能除了前导零)。

那是因为123适合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 /否则,如果新类型是无符号的,则通过重复加或减一个可以在新类型中表示的最大值来转换该值,直到该值在新类型的范围内。 / p>      

3 /否则,新类型已签名且值无法在其中表示;结果是实现定义的,或者引发实现定义的信号。

答案 2 :(得分:0)

十进制123是十六进制的0x7b和二进制的0111 1011,与原始类型无关。类型阻碍的唯一时间是溢出(例如int x = 48273; char y = (char)x;)。有时,signed charunsigned char的显示可能会有所不同。

答案 3 :(得分:0)

会是一样的。 0x7b hex,0111 1011

注意,如果你的整数是4个字节,那么它的位是0000 0000 0111 1011。