【问题标题】:how to translate char into hex and binary如何将char翻译成十六进制和二进制
【发布时间】:2011-09-17 14:11:48
【问题描述】:

我在 C 中有以下示例:

int x = 123; 

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

如果我的 x 是字符,那么十六进制/二进制值是多少?

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

【问题讨论】:

    标签: c binary char hex


    【解决方案1】:

    由于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 似乎解释得很好

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我在运行我的程序时得到了这个。字符 x = 123; printf("在 %x\n 之前", x);但是,我会假设因为 char = 1 字节和 1 字节 = 8 位。字符 x=123;不会是二进制的 0111 1011。因为那是 8 位。
      • @Gene 你为什么这么认为?
      【解决方案3】:

      它的十六进制和二进制值将完全相同(如果您想将其扩展为完整大小,可能会出现前导零)。

      这是因为 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/否则,如果新类型是无符号的,则在新类型可以表示的最大值的基础上重复加减1,直到值在新类型的范围内。

      3/ 否则,新类型是有符号的,值不能在其中表示;结果要么是实现定义的,要么引发实现定义的信号。

      【讨论】:

      • 谢谢大家。我的意思是用一个更大的例子。其中 char=1234,超过 8 位。大伙解释一下。似乎解决方案是 hex=0x4D2 和 binary=11010001。随着前 4 位被丢弃。 0100 1101 0001
      【解决方案4】:

      应该是一样的。 0x7b 十六进制 , 0111 1011

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

      【讨论】:

        猜你喜欢
        • 2011-02-05
        • 2012-02-24
        • 2014-10-30
        • 2012-04-08
        • 2023-03-22
        • 1970-01-01
        • 2018-08-26
        • 2012-06-26
        • 1970-01-01
        相关资源
        最近更新 更多