如何用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');。就完成了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-11-28
#首先说明一点,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'

本回答被提问者和网友采纳
第2个回答  2017-11-28
Python自带的内置函数有这个功能,bin()。
M