我有一些表示十六进制数字的字符串,我想将其转换为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,我如何能够整体处理不同基础之间的转换?如果您的解决方案涉及此功能,您能否进一步解释?所以,如果有人能在这里给我一些指示。我无法从文档中提取太多内容,因为这种知识似乎已经被预期了。
感谢。
答案 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)
只是一个字节字符串,您可以使用
b'...'
处理任意基本转换为base10参见本教程
http://mathbits.com/MathBits/CompSci/Introduction/tobase10.htm
这是一个将任何字母表中的任何字符串转换为十进制数10
的函数as_bytes = u'hello world'.encode('utf-8')