代码之家  ›  专栏  ›  技术社区  ›  Hassan

如何将十进制整数转换为单个十六进制字符?(c)

  •  2
  • Hassan  · 技术社区  · 16 年前

    我正在尝试将十进制整数转换为十六进制。我在网上做了很多搜索,并找到了很多方法。但是,我发现的每种方法都转换为字符串;例如,我可以将100转换为“64”。这不是我要做的。我希望能够将100转换成“0x64”,这是一个完全不同的问题。出于某种原因,我怀疑答案非常简单,但我似乎找不到/记不起来。我是用C语言写的,只是想澄清一下。任何帮助或想法都将不胜感激。

    谢谢, 哈桑

    4 回复  |  直到 16 年前
        1
  •  5
  •   Nikolai Fetissov    16 年前

    不能将数字从十进制“转换”为十六进制,因为它是…一个数字(通常存储在存储器中 two's complement )在所有可能的情况下相同数目的所有表示 positional systems live at exactly the same point on the number line. 虽然你可以 打印 它在不同的基础上:

    int num = 15;
    printf( "%d", num );   /* prints 15 */
    printf( "0x%x", num ); /* prints 0xf */
    printf( "0%o", num );  /* prints 017 (octal) */
    
    num = 0xf;
    printf( "%d", num );   /* prints 15 */
    printf( "0x%x", num ); /* prints 0xf */
    printf( "0%o", num );  /* prints 017 (octal) */
    
    num = 017;
    printf( "%d", num );   /* prints 15 */
    printf( "0x%x", num ); /* prints 0xf */
    printf( "0%o", num );  /* prints 017 (octal) */
    
        2
  •  5
  •   caf    16 年前

    Integer types in the C language don't really 底座。当你说:

    int a = 100;
    int b = 0x64;
    

    ……都 a b 有同样的价值。谈论转换是没有任何意义的。 十六进制(或 为小数)。

        3
  •  0
  •   Alexander Gessler    16 年前

    100 十进制是 0x64 在十六进制中,不需要“转换”。The base of an integer is just a matter of interpretation.

        4
  •  0
  •   Tyler McHenry    16 年前

    嗯,

    int i = 100;
    char c = i; // c now has the value 0x64 (aka decimal 100)
    

    除此之外,你真的没有别的事要做 i 不大于255。

    数字基础只有在打印或以其他方式向人显示数字时才真正发挥作用。就内存中的数字而言,100是0x64是0144是1100100。它们都是相同的值,所以它们都由相同的位集表示。

    这就像问你如何用西班牙语显示绿色。绿色就是绿色,不管你用的是什么语言。只有当你试图想出一种方法把它写成一个单词时,你才需要考虑你要使用什么语言。所以这是关于数字和决定使用哪个基数的问题。