0

我正在尝试编写一个程序,我需要使用 base-16 整数来确定使用 C 的 1 位错误检测。但是,我不确定 C 如何处理 base-16 整数。我必须首先从标准输入中提取低阶 16 位。我需要使用 scanf() 函数从标准输入读取前 16 位,然后将数字存储在 char 数组中(我的代码目前不考虑这一点)。当我只是简单地测试我的程序以查看它是否会以 16 位形式打印整数时,如果我输入一个基数为 16 的数字(例如 0xcd789f),它只会在 x 之前打印 0。到目前为止,这是我的代码。到目前为止,它只是一个标准的“从标准输入读取整数并将其打印到标准输出”程序。

#include <stdio.h>
int main()
{
    int num;

    scanf("%d", &num);  
    printf("%d\n", num);

    getchar();
}

此代码不适用于 base-16 数字。我该如何解释?感谢您的帮助!

4

2 回答 2

2
scanf("%x", &num);  
printf("%x %d\n", num, num);

Whether the number is represented in binary, octal, decimal or hex - the value of the number remains the same. This is shown by the print - it will print the value of the number in hex(base16) form and also in decimal form.

于 2013-03-08T19:11:15.127 回答
1

除了%xscanf格式字符串中使用之外,您还可以使用strtol来转换您的输入。

int num;
char buf[256];

if (fgets(buf, sizeof(buf), stdin) == 0) exit(0);
/* handles decimal, 0x prefix for hex, or 0 prefix for octal */
num = strtol(buf, 0, 0);
/* handles hex only, with or without 0x prefix */
num = strtol(buf, 0, 16);

如其他地方所述,要以十六进制打印,您应该使用%x转换说明符。如果您希望十六进制输出的字母为大写,请%X改用。如果您希望输出具有0x0X在前缀中,您可以使用#修饰符来转换说明符。

printf("hex: %x %#x\nHEX: %X %#X\ndec: %d\n", num, num, num, num, num);
于 2013-03-08T19:24:56.640 回答