怎么用脚本转换进制

wen 实用脚本 1

本文目录导读:

怎么用脚本转换进制

  1. Python 脚本(最推荐)
  2. Bash/Shell 脚本
  3. JavaScript/Node.js 脚本
  4. 命令行随手转换(Linux)
  5. 实用脚本:批量转换工具

Python 脚本(最推荐)

基础转换

# 十进制转其他进制
num = 255
print(bin(num))    # 转二进制: 0b11111111
print(oct(num))    # 转八进制: 0o377
print(hex(num))    # 转十六进制: 0xff
# 其他进制转十进制
print(int('11111111', 2))    # 二进制转十进制: 255
print(int('377', 8))         # 八进制转十进制: 255
print(int('ff', 16))         # 十六进制转十进制: 255

通用转换函数

def convert_base(number, from_base, to_base):
    """任意进制转换"""
    # 先转为十进制
    decimal = int(str(number), from_base)
    # 十进制转目标进制
    if to_base == 10:
        return str(decimal)
    digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    result = ""
    if decimal == 0:
        return "0"
    while decimal > 0:
        result = digits[decimal % to_base] + result
        decimal //= to_base
    return result
# 使用示例
print(convert_base('ff', 16, 2))    # 十六进制ff转二进制: 11111111
print(convert_base('1010', 2, 16))  # 二进制1010转十六进制: A

Bash/Shell 脚本

#!/bin/bash
# 十进制转其他进制
num=255
echo "十进制: $num"
echo "二进制: $(echo "obase=2; $num" | bc)"
echo "八进制: $(echo "obase=8; $num" | bc)"
echo "十六进制: $(echo "obase=16; $num" | bc)"
# 其他进制转十进制
echo "二进制转十进制: $((2#11111111))"
echo "八进制转十进制: $((8#377))"
echo "十六进制转十进制: $((16#ff))"
# 使用printf
printf "十进制255转十六进制: %x\n" 255
printf "十进制255转八进制: %o\n" 255

JavaScript/Node.js 脚本

// Node.js 进制转换
// 基本转换
let num = 255;
console.log(num.toString(2));   // 转二进制: 11111111
console.log(num.toString(8));   // 转八进制: 377
console.log(num.toString(16));  // 转十六进制: ff
// 其他进制转十进制
console.log(parseInt('11111111', 2));  // 255
console.log(parseInt('377', 8));       // 255
console.log(parseInt('ff', 16));       // 255
// 通用转换函数
function convertBase(number, fromBase, toBase) {
    // 先解析为十进制
    let decimal = parseInt(String(number), fromBase);
    // 十进制转目标进制
    if (toBase === 10) return String(decimal);
    return decimal.toString(toBase).toUpperCase();
}
// 使用示例
console.log(convertBase('ff', 16, 2));  // 11111111
console.log(convertBase('1010', 2, 16)); // A

命令行随手转换(Linux)

# 使用 printf
printf "%d\n" 0xff      # 十六进制转十进制: 255
printf "%x\n" 255       # 十进制转十六进制: ff
printf "%o\n" 255       # 十进制转八进制: 377
# 使用 python(最灵活)
python3 -c "print(bin(255))"     # 0b11111111
python3 -c "print(hex(255))"     # 0xff
python3 -c "print(int('ff', 16))" # 255
# 使用 bc
echo "obase=2; 255" | bc   # 11111111
echo "ibase=2; 11111111" | bc  # 255

实用脚本:批量转换工具

#!/usr/bin/env python3
# save as: convert.py
import sys
def convert_number(number, from_base, to_base):
    try:
        # 判断输入是否合法
        if from_base == 10:
            decimal = int(number)
        else:
            decimal = int(str(number), from_base)
        # 简化:只支持2-36进制
        if to_base == 10:
            return str(decimal)
        elif to_base == 2:
            return bin(decimal)[2:]
        elif to_base == 8:
            return oct(decimal)[2:]
        elif to_base == 16:
            return hex(decimal)[2:].upper()
        else:
            # 通用转换
            digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
            result = ""
            if decimal == 0:
                return "0"
            while decimal > 0:
                result = digits[decimal % to_base] + result
                decimal //= to_base
            return result
    except ValueError:
        return "错误:输入的数字格式不正确"
if __name__ == "__main__":
    if len(sys.argv) != 4:
        print("用法: python convert.py <数字> <原进制> <目标进制>")
        print("示例: python convert.py ff 16 2")
        sys.exit(1)
    number, from_base, to_base = sys.argv[1], int(sys.argv[2]), int(sys.argv[3])
    result = convert_number(number, from_base, to_base)
    print(f"{number}({from_base}) = {result}({to_base})")

使用方法:

python convert.py 255 10 2   # 十进制255转二进制
python convert.py ff 16 10   # 十六进制ff转十进制
python convert.py 377 8 2    # 八进制377转二进制

这些脚本应该能满足你的大多数进制转换需求,需要我解释某个特定脚本的细节,或者帮你写一个更针对性的工具吗?

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