如何用Python将十进制数字转为二进制,以及将二进制转为十六进制?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用Python将十进制数字转为二进制,以及将二进制转为十六进制?相关的知识,希望对你有一定的参考价值。
1. 写一个程序 convertToBinary(),要求是将一个十进制数字(可正可负)转换为64位的二进制补码形式。
2.写一个程序 convertToHex(),要求是将一个任意的补码形式的二进制转换为十六进制
最好内置函数方法和从定义一步步计算的方法都写出来
1、将十进制转换成二进制,利用bin()方法。
2、获取二进制数据的长度。
3、to_bytes(),byteorder为little>>> (2048).to_bytes(2,byteorder='little');b'\\x00\\x08'。
4、使用to_bytes()方法,byteorder为big。
5、添加signed=True属性>>> (-10240).to_bytes(10,byteorder='little',signed=True);。
6、利用bit_length()方法>>> A3=45125656;>>> A3.to_bytes((A3.bit_length()+7) // 8,byteorder='big');。就完成了。
参考技术A #首先说明一点,python有现成的函数可以干这个,只不过这个位数不会按照你想要的位数输出而已#这些函数是 bin(), hex(), oct(),这些函数自己去看它的源码实现。
#个人写的如下
def addone(mods):
assert isinstance(mods,list)
tmods = mods.copy()
if tmods:
if tmods[0] == 0:
tmods[0] = 1
return(tmods)
else:
return([0] + addone(tmods[1:]))
return([])
hexmap =
"0000": "0",
"0001": "1",
"0010": "2",
"0011": "3",
"0100": "4",
"0101": "5",
"0110": "6",
"0111": "7",
"1000": "8",
"1001": "9",
"1010": "A",
"1011": "B",
"1100": "C",
"1101": "D",
"1110": "E",
"1111": "F",
def convertToBinary(num, site=64):
assert -2**(site - 1) <= num < 2**(site - 1), "the %d is not in range [%d,%d)" % (num, -2**(site-1), 2**(site-1))
mod = []
quotient = abs(num)
if quotient == 0:
mod = [0]
else:
while quotient:
mod.append(quotient % 2)
quotient = quotient // 2
mod += [0]*(site - len(mod) - 1)
#if negative
if num < 0:
#not
mod = [ 0 if i else 1 for i in mod ]
#add 1
mod = addone(mod)
#add sign
mod += [1]
else:
mod += [0]
return("".join([str(i) for i in reversed(mod)]))
def convertToHex(code):
clen = len(code)
mod = clen % 4
if mod != 0:
if code[0] == 0:
code = "0" * (4 - mod) + code
else:
code = "1" * (4 - mod) + code
out = []
for i in range(0,len(code),4):
out.append(hexmap[code[i:i+4]])
return("".join(out))
#convertToBinary(33,16)
#'0000000000100001'
#convertToHex(convertToBinary(-33,64))
#'FFFFFFFFFFFFFFDF'
#convertToHex("1110001")
#'F1'本回答被提问者和网友采纳 参考技术B Python自带的内置函数有这个功能,bin()。
M
以上是关于如何用Python将十进制数字转为二进制,以及将二进制转为十六进制?的主要内容,如果未能解决你的问题,请参考以下文章