python ASCII编码

本文详细介绍了Python中bytes类型与str类型的转换方法,包括使用encode()和decode()函数的过程,以及bytearray的特性与操作。同时,文章还探讨了不同bytes的创建方式和特殊字符的处理。

bytes

>>> type(b'xxxxx')
<class 'bytes'>

>>> type('xxxxx')
<class 'str'>

bytes是byte的序列,而str是unicode的序列。

 

1、str 转换成 bytes 用 encode() 方法:(注意:这有个坑,str1.encode不加括号和加括号是不一样的,自己试试,初学貌似2.0不影响,3.0变了,不加括号开发环境语法不报错)

str = 'Python!'
bytes = str.encode()
print(bytes)

输出:

b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8Python!'

2、好了,反转换 decode() :

bytes = b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8Python!'
str = bytes.decode()
print(str)

输出:

Python!

bytearray

1、bytearray和bytes不一样的地方在于,bytearray是可变的。

str = 'Python!'
bytes = bytearray(str.encode())
bytes = bytearray(b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8Python!')
str = bytes.decode()
print(str)

输出:

'Python!'

2、改变bytearray

bytes[:6] = bytearray('语言'.encode())
bytes = bytearray(b'\xe7\x94\x9f\xe5\x91\xbd\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8Python!')
str = bytes.decode()
print(str)

输出:

语言thon!

各种 bytes :

 

a = bytes('abc', 'utf-8')  
print(a)
> b'abc'

b  = bytes(1)  
print(b)
> b'\x00'

c = bytes([2,3,6,8])  
print(c)
> b'\x02\x03\x06\x08'

print(b"Python")
> b'Python'

python = (b'P' b'y' b"t" b'o' b'n')
print(python)
> b'Pyton'

 

 

 Bytes 代表的是(二进制)数字的序列,只不过在是通过 ASCII 编码之后才是我们看到的字符形式,如果我们单独取出一个字节,它仍然是一个数字:

1

print(b"Python"[0])<br>> 80

我们可以用 b"*" 的形式创建一个字节类型,前提条件是这里的 * 必须是 ASCII 中可用的字符,否则将会超出限制:

print(b"y")
> File "", line 1
   print(b"y")
         ^
SyntaxError: bytes can only contain ASCII literal characters.

错误提示说明:字节类型只能允许 ASCII 字符(0~127~255)。ASCII 表里面所有的字符只占据了 [31, 127]

那对于这一范围之外的数字我们要怎么才能表示为字节类型?答案就是用特殊的转义符号x+十六进制数字 :

print(b'xff'[0])
> 255
print(b'x24')
> b'$'

反过来我们也可以将数字(0~255)转变成转义后的字节类型:

print(bytes([24]))
> b'x18'
print(bytes([36,36,36])) # 记住字节类型是一个序列

或者直接从十六进制得来:

 

print(bytes.fromhex("7b 7d"))
> b'{}'

# 逆运算
print(b'{ }'.hex())
> 7b207d
 
int(b' '.hex(), base=16)
> 32

 

测试的一些代码:

 

print("$".encode('ascii'))
> b'$'
print("$".encode('ascii')[0])
> 36

ba = bytearray(b'hello')
ba[0:1] = b'w'
print(ba)
bytearray(b'wello') 

 

可是如果我们对一些奇怪的字符进行 ASCII 编码,就会发生异常:ordinal not in range(128)

Python中,ASCII编码是一种字符编码方案,它将每个字符映射到一个唯一的整数(0-127)。对于信息加密,特别是涉及到简单固定偏移量(也称为 Caesar Cipher,凯撒密码),你可以对ASCII码值进行操作。例如,通过将每个字符的ASCII值加上一个固定的数字(偏移量)来进行加密。 以下是简单的步骤: 1. **获取原始ASCII值**:首先,你需要将字符串转换成ASCII码表示的列表。可以使用`ord()`函数得到单个字符的ASCII值,然后遍历整个字符串。 2. **加密处理**:对于每个字符的ASCII值,加上预设的偏移量(比如5),然后取模256以保持结果在0-255范围内,因为ASCII表最大值就是128+127=255。 3. **生成密文**:得到加密后的ASCII值,可以对应回字符,形成加密后的字符串。 4. **解密**:同样地,如果需要解密,只需从加密后的ASCII值减去偏移量并调整范围即可。 ```python def caesar_cipher_encrypt(text, shift): encrypted = [] for char in text: encrypted_char = chr((ord(char) + shift) % 256) encrypted.append(encrypted_char) return ''.join(encrypted) def caesar_cipher_decrypt(encrypted_text, shift): decrypted = [] for char in encrypted_text: decrypted_char = chr((ord(char) - shift) % 256) decrypted.append(decrypted_char) return ''.join(decrypted) # 示例 original = "Hello, World!" shift = 5 encrypted = caesar_cipher_encrypt(original, shift) print(f"Encrypted: {encrypted}") decrypted = caesar_cipher_decrypt(encrypted, shift) print(f"Decrypted: {decrypted}")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值