需要将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(),只想保存。
答案 0 :(得分:2)
十进制和八进制是数字基数,这仅在呈现数字时(或输入数字时);实际的数字通常以二进制形式存储在计算机的内存中,但这对于典型的程序来说并不重要。
在您的情况下,转换为八进制通常涉及一次提取三位(因为2 3 是8)。这可以通过使用掩码7
(二进制111
)进行掩码,然后进行移位来完成。这将以从右到左的顺序获得八进制数字。
假设8位的char
(这是典型的),你将生成3个八位数,因为3 * 3 = 9.两个数字只能覆盖6位,这显然是不够的。< / p>
这太少了,你实际上可以“展开”它:
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);