十六进制到base64和其他基

2024-09-27 02:14:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些用十六进制表示数字的字符串,我想把它转换成base-64。我如何做到这一点,这个建议是如何工作的?因为我需要了解它的工作原理。你知道吗

我想到的第一件事是(我是一个noob)实现一个简单的算法,它可以像处理纸和笔一样工作,尽管我认为Python有这种“内置”的东西。你知道吗

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

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

  • 如果您的答案需要b'...'类型的字符串,请您解释一下它们是什么,b64encode()为什么似乎只接受这种类型的对象作为参数?你知道吗
  • 为什么int()只适用于base-36,我通常如何处理不同base之间的转换,如果您的解决方案涉及到这个函数,您能给出进一步的解释吗?你知道吗

如果有人能给我一些建议。我无法从文档中提取太多信息,因为这类知识似乎已经在意料之中了。你知道吗

谢谢。你知道吗


Tags: 对象字符串答案算法示例类型base参数
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字符没有关联,打印过程会自动尝试将字节转换为ascii字符或类似\xab的内容。因此,我们将字节馈送到b64encode,它通常用于处理文件,因此需要字节对象,它将一个ascii字符串作为字节对象。对于这个结果,相反的过程是类似的:b64ascii string->;二进制字节数->;hex->;int

假设输入为“aaccffdde5e5ff”

import binascii,base64
input_str = 'aaccffdde5e5ff'
dehexed_str = binascii.unhexlify(input_str)
base64_str = base64.b64encode(dehexed_str)

b'...'只是一个bytestring,您可以使用它将普通unicode字符串编码为字节

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

要处理到base10的任意基转换,请参阅本教程

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

下面是一个函数,用于将任何字母表中的任何字符串转换为十进制10

def int10(s,alphabet):
    base = len(alphabet)
    return sum([alphabet.index(c)*base**i for i,c in enumerate(s[::-1])])

hexAlphabet="0123456789abcdef"
print(int10('f3',hexAlphabet))

相关问题 更多 >

    热门问题