假设我想在C中添加两个八进制值01440144

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/

10-16 07:35