需要将char的代码转换为八进制。也许先将 char 转换为十进制,然后再转换为八进制,如果这样更容易的话。没关系。
char c; // equal 'd' or '\n' for example
int d=...;//something to change
printf("%o",c)
将是一个很好的变体,但我不能使用标准 C 函数。仅自己实现转换。
请在这里写一些更好的工具或者你自己的工具。
printf() 如何为 (%o) 执行此操作
printf(ul, 8)
{
/* hold a long in base 8 */
char *p, buf[(sizeof(long) * NBBY / 3) + 1];
p = buf;
do {
*p++ = "0123456789abcdef"[ul % base];
} while (ul /= base);
do {
putchar(*--p);
} while (p > buf);
}
但我不想使用 putchar(),只想保存。
最佳答案
十进制和八进制是数字基数,仅在呈现数字时(或输入数字时)才有意义;实际数字通常以二进制形式存储在计算机内存中,但这对于典型程序来说通常并不重要。
就您而言,转换为八进制通常涉及一次提取三位(因为 23 是 8)。这可以通过使用掩码 7
(二进制 111
)进行掩码,然后移位来完成。这将从右到左的顺序获取八进制数字。
假设 char
为 8 位(这是典型的),您将生成 3 个八进制数字,因为 3 * 3 = 9。两个数字只能覆盖 6 位,这显然不是够了。
这太少了,你实际上可以“展开”它:
void to_octal(char *buf, unsigned char x)
{
buf[0] = '0' + ((x >> 6) & 7);
buf[1] = '0' + ((x >> 3) & 7);
buf[2] = '0' + (x & 7);
buf[3] = '\0';
}
请注意,上述要求 buf
至少有四个字符的可用空间。用法:
const unsigned char x = 212;
char buf[8];
to_octal(buf, x);
printf("%d is %s in octal\n", x, buf);
关于c++ - 如何在没有 print(f) 等标准 C 函数的情况下将 char 转换为八进制格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16140723/