脚本如何进制相互转换

wen 实用脚本 28

本文目录导读:

脚本如何进制相互转换

  1. JavaScript 进制转换
  2. Python 进制转换
  3. Java 进制转换
  4. PHP 进制转换
  5. C# 进制转换
  6. 通用的手动转换函数
  7. 实用技巧

我来为您介绍不同编程语言中的进制转换方法。

JavaScript 进制转换

// 任意进制转十进制
let binary = parseInt('1010', 2);     // 二进制转十进制: 10
let octal = parseInt('12', 8);        // 八进制转十进制: 10
let hex = parseInt('A', 16);          // 十六进制转十进制: 10
// 十进制转其他进制
let num = 10;
num.toString(2);   // '1010' - 二进制
num.toString(8);   // '12' - 八进制
num.toString(16);  // 'a' - 十六进制
// 任意进制互转
function convertBase(num, fromBase, toBase) {
    return parseInt(num, fromBase).toString(toBase);
}
// 示例:二进制转十六进制
convertBase('1010', 2, 16); // 'a'

Python 进制转换

# 十进制转其他进制
num = 10
bin(num)      # '0b1010' - 二进制
oct(num)      # '0o12' - 八进制
hex(num)      # '0xa' - 十六进制
# 去掉前缀
bin(num)[2:]  # '1010'
oct(num)[2:]  # '12'
hex(num)[2:]  # 'a'
# 其他进制转十进制
int('1010', 2)    # 二进制转十进制: 10
int('12', 8)      # 八进制转十进制: 10
int('A', 16)      # 十六进制转十进制: 10
# 任意进制转换函数
def convert_base(num, from_base, to_base):
    # 先转十进制,再转目标进制
    decimal = int(str(num), from_base)
    if to_base == 10:
        return str(decimal)
    # 处理目标进制转换
    digits = "0123456789ABCDEF"
    result = ""
    while decimal > 0:
        result = digits[decimal % to_base] + result
        decimal //= to_base
    return result if result else "0"

Java 进制转换

public class BaseConverter {
    // 十进制转其他进制
    public static void decimalToOthers(int num) {
        String binary = Integer.toBinaryString(num);  // 二进制
        String octal = Integer.toOctalString(num);    // 八进制
        String hex = Integer.toHexString(num);        // 十六进制
    }
    // 其他进制转十进制
    public static void othersToDecimal() {
        int binary = Integer.parseInt("1010", 2);     // 二进制转十进制
        int octal = Integer.parseInt("12", 8);        // 八进制转十进制
        int hex = Integer.parseInt("A", 16);          // 十六进制转十进制
    }
    // 通用进制转换
    public static String convertBase(String num, int fromBase, int toBase) {
        return Integer.toString(
            Integer.parseInt(num, fromBase), 
            toBase
        ).toUpperCase();
    }
}

PHP 进制转换

// 十进制转其他进制
$num = 10;
decbin($num);     // '1010' - 二进制
decoct($num);     // '12' - 八进制
dechex($num);     // 'a' - 十六进制
// 其他进制转十进制
bindec('1010');    // 二进制转十进制: 10
octdec('12');      // 八进制转十进制: 10
hexdec('A');       // 十六进制转十进制: 10
// 通用转换函数
function convertBase($num, $fromBase, $toBase) {
    return base_convert($num, $fromBase, $toBase);
}
// 示例
echo convertBase('1010', 2, 16); // 'a'

C# 进制转换

// 十进制转其他进制
int num = 10;
Convert.ToString(num, 2);  // '1010' - 二进制
Convert.ToString(num, 8);  // '12' - 八进制
Convert.ToString(num, 16); // 'a' - 十六进制
// 其他进制转十进制
Convert.ToInt32("1010", 2); // 二进制转十进制: 10
Convert.ToInt32("12", 8);   // 八进制转十进制: 10
Convert.ToInt32("A", 16);   // 十六进制转十进制: 10

通用的手动转换函数

// 完整的手动进制转换(不依赖内置函数)
function manualConvertBase(num, fromBase, toBase) {
    const digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    // 任意进制转十进制
    function toDecimal(str, base) {
        return str.split('').reverse().reduce((acc, digit, index) => {
            return acc + digits.indexOf(digit) * Math.pow(base, index);
        }, 0);
    }
    // 十进制转任意进制
    function fromDecimal(num, base) {
        if (num === 0) return '0';
        let result = '';
        while (num > 0) {
            result = digits[num % base] + result;
            num = Math.floor(num / base);
        }
        return result;
    }
    const decimal = toDecimal(String(num), fromBase);
    return fromDecimal(decimal, toBase);
}

实用技巧

  1. 常用进制范围:通常处理2、8、10、16进制,但理论上可转换任意进制(2-36)

  2. 大小写问题:十六进制中,'A'和'a'都表示10,但某些函数区分大小写

  3. 前缀处理:有些转换结果会带前缀(如0x, 0b),根据需要添加或去除

  4. 错误处理:转换前验证输入是否在目标进制范围内

需要我针对特定语言或更复杂的转换场景做详细说明吗?

抱歉,评论功能暂时关闭!