您现在的位置是:首页 >技术教程 >最简便高效的常见进制转换——C 和 C++版网站首页技术教程

最简便高效的常见进制转换——C 和 C++版

〣.*鳪諟 2025-02-10 12:01:02
简介最简便高效的常见进制转换——C 和 C++版

C 语言实现

1. 十进制转二进制、八进制、十六进制

在 C 语言中,可以使用 printf 函数的格式化输出功能来完成十进制到其他进制的转换。

#include <stdio.h>

int main() {
    int decimal_num;
    scanf("%d",&decimal_num)//输入要转换的十进制数

    // 十进制转二进制(借助位运算手动输出)
    for (int i = 7; i >= 0; i--) {
        printf("%d", (decimal_num >> i) & 1);
    }
    printf("
");

    // 十进制转八进制
    printf("%o
", decimal_num);

    // 十进制转十六进制(小写字母)
    printf("%x
", decimal_num);

    // 十进制转十六进制(大写字母)
    printf("%X
", decimal_num);

    return 0;
}

解释

  • 十进制转二进制时,利用位运算 (decimal_num >> i) & 1 逐位提取二进制位并输出。
  • 十进制转八进制使用 %o 格式说明符。
  • 十进制转十六进制使用 %x(小写字母)和 %X(大写字母)格式说明符。

 2. 二进制、八进制、十六进制转十进制

可以使用 strtol 函数将其他进制的字符串表示转换为十进制整数。

#include <stdio.h>
#include <stdlib.h>

int main() {
    
    //示例
    char binary_str[] = "11111111";
    char octal_str[] = "377";
    char hex_str[] = "ff";

    // 二进制转十进制
    long binary_decimal = strtol(binary_str, NULL, 2);
    printf("%ld
", binary_decimal);

    // 八进制转十进制
    long octal_decimal = strtol(octal_str, NULL, 8);
    printf("%ld
", octal_decimal);

    // 十六进制转十进制
    long hex_decimal = strtol(hex_str, NULL, 16);
    printf("%ld
", hex_decimal);

    return 0;
}

解释
strtol 函数的原型为 long strtol(const char *nptr, char **endptr, int base),其中 nptr 是要转换的字符串,endptr 用于存储转换结束的位置(这里设为 NULL),base 是字符串表示的进制。

C++ 实现

1. 十进制转二进制、八进制、十六进制

C++ 可以使用 <iostream> 和 <bitset> 库来完成进制转换

#include <iostream>
#include <bitset>
#include <iomanip>

int main() {
    int decimal_num = 255;

    // 十进制转二进制
    std::cout << std::bitset<8>(decimal_num) << std::endl;

    // 十进制转八进制
    std::cout << std::oct << decimal_num << std::endl;

    // 十进制转十六进制(小写字母)
    std::cout << std::hex << decimal_num << std::endl;

    // 十进制转十六进制(大写字母)
    std::cout << std::uppercase << std::hex << decimal_num << std::endl;

    return 0;
}

解释

  • 十进制转二进制使用 std::bitset 模板类,指定二进制位数为 8。
  • 十进制转八进制使用 std::oct 操纵符。
  • 十进制转十六进制使用 std::hex 操纵符,std::uppercase 用于输出大写字母。

 2. 二进制、八进制、十六进制转十进制

C++ 可以使用 std::stoi 函数将其他进制的字符串表示转换为十进制整数。

#include <iostream>
#include <string>

int main() {
    std::string binary_str = "11111111";
    std::string octal_str = "377";
    std::string hex_str = "ff";

    // 二进制转十进制
    int binary_decimal = std::stoi(binary_str, nullptr, 2);
    std::cout << binary_decimal << std::endl;

    // 八进制转十进制
    int octal_decimal = std::stoi(octal_str, nullptr, 8);
    std::cout << octal_decimal << std::endl;

    // 十六进制转十进制
    int hex_decimal = std::stoi(hex_str, nullptr, 16);
    std::cout << hex_decimal << std::endl;

    return 0;
}

解释
std::stoi 函数的原型为 int stoi(const std::string& str, std::size_t* pos = 0, int base = 10),其中 str 是要转换的字符串,pos 用于存储转换结束的位置(这里设为 nullptr),base 是字符串表示的进制。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。