【问题标题】:How can I convert octal to hexadecimal? [closed]如何将八进制转换为十六进制? [关闭]
【发布时间】:2019-10-27 10:04:54
【问题描述】:

如何在C语言中将八进制数转换为十六进制和十六进制转换为八进制?

【问题讨论】:

  • 欢迎来到 SO。你的问题不清楚。您想知道如何将表示八进制数的字符串转换为表示相同数字但使用十六进制数字的另一个字符串吗?
  • 首先,你会用纸和铅笔怎么做?你能写一个 main() 函数来定义一个变量来保存你想要转换的输入和另一个包含输出的变量吗?
  • 您甚至可能不需要这样做。数字是数字,它们的具体表示仅用于输入/输出。所以这个问题在具体问题提出之前没有好的答案。
  • 在纸上,你连续将得到的八进制商除以 020,并跟踪余数,直到你的商为 0。你将 000 ... 017 转换为 @987654324 @ ... 0xF 将八进制余数转录为十六进制数字时。
  • @jxh 我发现使用八进制->二进制->十六进制要容易得多。不涉及数学,只需要知道0-15的二进制表示

标签: c hex octal


【解决方案1】:

由于基数的概念仅在描述数字的表示或输出时才有意义,我假设您的意思是“如何在数字的八进制和十六进制 表示之间进行转换?”

幸运的是,C 标准要求 printf 系列函数包含格式说明符 %o%x,它们分别代表“八进制数”和“十六进制数”,因此使用 @ 987654324@,你可以这样做:

char buffer[100];

snprintf(buffer, 100, "%X", 0777);
printf("%s\n", buffer);

snprintf(buffer, 100, "%o", 0xFFF);
printf("%s\n", buffer);

输出:

1FF
7777

另外,strtol-family 函数有一个 radix 参数,用于将字符串转换为数字:

int n;

n = strtol("0777", NULL, 8);
printf("%d\n", n);

n = strtol("0x1FF", NULL, 16);
printf("%d\n", n);

输出:

511
511

通过这些构建块,您现在拥有处理输入形式的输入以及在数字值的八进制和十六进制表示之间进行转换的必要知识。

【讨论】:

    猜你喜欢
    • 2021-01-29
    • 1970-01-01
    • 2011-08-21
    • 2013-11-07
    • 2019-01-23
    • 2013-10-22
    • 2016-04-15
    • 2019-11-07
    • 2015-12-12
    相关资源
    最近更新 更多