十六进制表示

时间:2015-11-05 16:33:17

标签: c hex

我想将十六进制的int值打印为%d。

当值写为十六进制时,这不是问题:

#include <stdio.h>

    int main(void) {
        int x=0x18;
        int y=0xAB;
        printf("%d %d", x, y );

        return 0;
    }

但是......如果这是十进制值,我怎么打印?

我想要这样的事情:

  1. 十进制值:
  2. x = 551更改为十六进制x = 227并打印为%d?

    在本练习中,我必须将十六进制整数打印为%d。

    希望我写得这么干净。 :)

    此致

2 个答案:

答案 0 :(得分:0)

奇数请求:使用@Html.DisplayFor(item => ((Inq_DetailsBase)Model)) 打印十进制值。

"%x"

输出:

void dec_print_with_x(unsigned x) {
  if (x >= 10) dec_print_with_x(x/10);
  printf("%x", x%10);
}

int main ( void )
{
  dec_print_with_x(0x227);
  return 0;
}

要清楚,551 x之类的变量int x = 0x227;既不是十进制,十六进制也不是二进制。它有一个整数以某种方式编码并存储在某处 - 很可能是2's complement中固定宽度的位模式。

int x = 551;0x18 0xAB text ,它是源代码的一部分,0x227是输出的一部分。这些字符序列表示十六进制或十进制表示的值。

答案 1 :(得分:0)

如果你这样做:

int x = 898;
x = 0x382;
printf(" x = %d", x);

输出将是:

 x = 898

在您的代码中,8980x382是表示相同数字的两种不同方式。它们以完全相同的方式存储。

如果您使用printf或十六进制格式%d,那么%x所做的是采用该数字的内部表示并以十进制格式打印。你如何完成任务并不重要。

另一种看待它的方式 - 这段代码:

int x = 898;
int y = 0x382;
if (x == y) {
    printf("x and y are equal\n");
} else {
    printf("x and y are not equal\n");
}

输出:

x and y are equal