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

| 我在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 = ??
    
已邀请:
        由于
char
小于than3ѭ,因此将是相同的。除了前导零外,您会发现
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
至于二进制值..谷歌是你的朋友 这个网站似乎解释得很好     
        它的十六进制和二进制值将完全相同(如果要将其扩展为完整大小,则前导零可能除外)。 那是因为123恰好适合
char
。带符号的char至少可以包含值
-127
127
(二进制补码可以处理
-128
,但是ISO标准允许负号的补码和正负号作为两个其他负数编码,这两个编码都不能处理)
-128
),一个至少为
0
255
的无符号字符。 假设一个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位ѭ2中,则最低有效位通常是保留的那些。
char xyz = 0x1234; // results in xyz being given the value 0x34.
这在C99的
6.3.1.3/2
/3
部分中有详细说明:   1 /当将整数类型的值转换为_Bool以外的其他整数类型时,如果该值可以用新类型表示,则该值不变。      2 /否则,如果新类型是无符号的,则通过重复添加或减去比新类型可表示的最大值多一个值来转换该值,直到该值在新类型的范围内为止。      3 /否则,将对新类型进行签名,并且无法在其中表示值;结果是实现定义的,还是引发实现定义的信号。     
        十进制123是十六进制的0x7b,二进制是0111 1011,与原始类型无关。该类型唯一的障碍是溢出(例如(21ѭ)。有时,
signed char
unsigned char
的显示可能会有所不同。     
        会是一样的。十六进制0x7b,0111 1011 请注意,如果您的整数是4个字节,则其位为0000 0000 0111 1011。     

要回复问题请先登录注册