假设我想在C中添加两个八进制值0144
到0144
。
int a = 0144;
int b = 0144;
int result = a + b;
printf("%d, %o", result, result);
> 200, 310
在我的程序中,输入一个十六进制值,它被转换成八进制值,但是转换后的结果看起来像是基数10而不是基数8的整数。
例如:
int oct = convertHexToOct(64)
printf("%d, %o", oct, oct);
> 144, 220
int result = oct + oct;
printf("%d, %o, result, result);
> 288, 440
所以oct变量的十进制表示实际上是所需整数的八进制值。这意味着对这个变量所做的任何运算都将以基数10完成,这不是我想做的。
理想情况下,我基本上想做的是
int intAsOct = "0" + oct;
int octalResult = intAsOct + intAsOct;
但这显然行不通。所以问题的根源是,我如何将一个不带前导0的整数变量作为八进制处理,以便在算术中使用?
最佳答案
根据您的评论:
如何取一个base10整数,“144”并让C将其视为base8
整数,“0144”
您可以手动进行转换,但最简单的方法是通过标准库字符串函数进行转换,如下所示:
#include <stdio.h>
#include <stdlib.h>
int dec_to_oct(const int dec)
{
char buffer[64];
char * endptr;
/* Convert number to decimal string representation */
sprintf(buffer, "%d", dec);
/* Convert decimal string representation back as octal */
long l = strtol(buffer, &endptr, 8);
if ( *endptr != '\0' ) {
fprintf(stderr, "Error! Could not convert decimal %d to octal.\n", dec);
exit(EXIT_FAILURE);
}
return (int) l;
}
int main(void)
{
int num = 144;
printf("Before conversion: %d, %#o, %#x\n", num, num, num);
num = dec_to_oct(num);
printf("After conversion: %d, %#o, %#x\n", num, num, num);
dec_to_oct(999); /* This will fail */
return 0;
}
输出:
Paul@Pauls-iMac:~/Documents/src/sandbox$ ./dec_to_oct
Before conversion: 144, 0220, 0x90
After conversion: 100, 0144, 0x64
Error! Could not convert decimal 999 to octal.
Paul@Pauls-iMac:~/Documents/src/sandbox$
关于c - 如何使用整数变量执行八进制算术?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33685526/