65 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
#!/usr/bin/env python3
 | 
						|
# Eryn Wells <eryn@erynwells.me>
 | 
						|
 | 
						|
import argparse
 | 
						|
import json
 | 
						|
import os.path
 | 
						|
import sys
 | 
						|
 | 
						|
FORMATS = {
 | 
						|
    'bin': 2,
 | 
						|
    'oct': 8,
 | 
						|
    'dec': 10,
 | 
						|
    'hex': 16,
 | 
						|
}
 | 
						|
 | 
						|
def convert_number_to_all_bases(n):
 | 
						|
    try:
 | 
						|
        n = n.lower()
 | 
						|
        if n.startswith('0x'):
 | 
						|
            base = 16
 | 
						|
        elif n.startswith('0o'):
 | 
						|
            base = 8
 | 
						|
        elif n.startswith('0b'):
 | 
						|
            base = 2
 | 
						|
        else:
 | 
						|
            base = 10
 | 
						|
        num = int(n, base=base)
 | 
						|
    except ValueError:
 | 
						|
        print(f'Error: cannot parse string as int: {n}', file=sys.stderr)
 | 
						|
    else:
 | 
						|
        return {
 | 
						|
            'bin': str(bin(num)[2:]),
 | 
						|
            'oct': str(oct(num)[2:]),
 | 
						|
            'dec': str(num),
 | 
						|
            'hex': str(hex(num)[2:]).upper(),
 | 
						|
        }
 | 
						|
 | 
						|
def parse_args(argv, *a, **kw):
 | 
						|
    parser = argparse.ArgumentParser(*a, **kw)
 | 
						|
    parser.add_argument('--ascii', '-a', action='store_true')
 | 
						|
    parser.add_argument('numbers', nargs='+')
 | 
						|
    args = parser.parse_args(argv)
 | 
						|
    return args
 | 
						|
 | 
						|
def main(argv):
 | 
						|
    args = parse_args(argv[1:], prog=argv[0])
 | 
						|
 | 
						|
    output = {}
 | 
						|
 | 
						|
    for n in args.numbers:
 | 
						|
        if args.ascii:
 | 
						|
            for c in n:
 | 
						|
                output.setdefault(c, convert_number_to_all_bases(str(ord(c))))
 | 
						|
        else:
 | 
						|
            output.setdefault(n, convert_number_to_all_bases(n))
 | 
						|
 | 
						|
    json.dump(output, sys.stdout, indent=2)
 | 
						|
    print('\n')
 | 
						|
 | 
						|
    return 0
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    import sys
 | 
						|
    result = main(sys.argv)
 | 
						|
    sys.exit(0 if not result else result)
 |