Hex到base-64和其他碱基

时间:2016-10-05 22:28:13

标签: python

我有一些表示十六进制数字的字符串,我想将其转换为base-64。我该怎么做?这个建议如何运作?因为我需要了解它是如何工作的。

我想到的第一件事是(我是一个菜鸟)实现一个简单的算法,就像使用笔和纸一样,虽然我认为Python有这种“内置”的东西。 / p>

我可以通过在互联网上搜索来实现这一点,但我需要了解它是如何工作的。

一些示例问题可以让您了解我需要的解释:

  • 如果您的答案需要procedure TForm1.DBGrid1DblClick(Sender: TObject); [as above] begin [ as above ] CellValue := DBGrid1.Columns[ACol].Field.AsString; OtherForm.Memo1.Lines.Add(Format('Col:%d Row:%d Cell Value:%s', [ACol, ARow, CellValue])); end; 类型的字符串,请解释它们是什么以及为什么b'...'似乎只接受此类型的对象作为参数?
  • 为什么b64encode()仅适用于base-36,我如何能够整体处理不同基础之间的转换?如果您的解决方案涉及此功能,您能否进一步解释?

所以,如果有人能在这里给我一些指示。我无法从文档中提取太多内容,因为这种知识似乎已经被预期了。

感谢。

2 个答案:

答案 0 :(得分:2)

这是一段代码,引导您完成从十六进制字符串转换为b64编码字符串的过程。

import base64
x=int('0xABCDEF01',base=16)
print("x  : ",x)
b=x.to_bytes(length=4,byteorder='big')
print("b  : ",b)
e=base64.b64encode(b)
print("e  : ",e)
b2=base64.b64decode(e)
print("b2 : ",int(b2.hex(),base=16))

输出:

x  :  2882400001
b  :  b'\xab\xcd\xef\x01'
e  :  b'q83vAQ=='
b2 :  2882400001

一些(冗长的)解释:所以我们从字符串中的十六进制开始,没有什么特别的,int将它与基数一起将其转换为常规整数x。 python x是一串代表一个数字的位,它将在大多数时间在基数10中打印。我们可以使用x.to_bytes来询问位表示。结果是一个字节序列,将打印为b'...',请注意打印过程会自动尝试将字节转换为ascii caracters或转换为\xab之类的内容,如果给定的字节与之关联的话ascii字符。因此,我们将字节提供给b64encode,这通常用于处理文件,因此该字节对象要求并将 ascii-string 作为字节对象进行吐出。通过该结果,反向过程类似:b64 ascii-string - >以字节为单位的二进制数 - > hex - >中间体

答案 1 :(得分:1)

假设输入'aaccffdde5e5ff'

SubViewController

import binascii,base64 input_str = 'aaccffdde5e5ff' dehexed_str = binascii.unhexlify(input_str) base64_str = base64.b64encode(dehexed_str) 只是一个字节字符串,您可以使用

将普通的unicode字符串编码为字节

b'...'

处理任意基本转换为base10参见本教程

http://mathbits.com/MathBits/CompSci/Introduction/tobase10.htm

这是一个将任何字母表中的任何字符串转换为十进制数10

的函数
as_bytes = u'hello world'.encode('utf-8')