python3大端、小端(Big Endian、LittleEndian)编码

大端模式,小端模式指的是数据在内存地址中存储的顺序不同。

一般操作系统都是小端,而通讯协议是大端的,所以我们在传输数据时,需要将数据转码。

今天在调接口时,就遇了一个这样的接口:

将双字节文字使用Big Endian编码后,转为16进制HEX字符串传输。

这个描述让我费了好大功夫去搜python3应该怎样实现。其实就是分两步:
1. 将内容使用utf-16-be编码去encode。
2. 将encode后的内容转为16进制的字符串。

import binascii
import sys
print("本机存储模式是{} Endian.\n".format(sys.byteorder.capitalize()))

content = "待传输中文文本"  # content是str类型
print("原文本为:", content, '\n')

# 先看最终代码
result = binascii.b2a_hex(content.encode('utf-16-be'))
print("编码后文本为:", result, '\n')
content = binascii.a2b_hex(result).decode('utf-16-be')
print("解码后文本为:", content, '\n')

# ————————————————————————————————————————————————
# 下面开始解释代码
# 解释编码
coded = content.encode('utf-16-be') # coded是bytes类型,uft-16就不解释了,be是Big Endian的缩写。
print("使用utf-16-be编码后为:", coded, '\n')
result = binascii.b2a_hex(coded) # b2a应该是bytes to ascii,hex就是16进制的意思,b2a_hex方法和hexlify方法是相同的。
print("utf-16-be转为hex为:", result, '\n')

# 解释解码
coded = binascii.a2b_hex(result) # 同理a2b应该是ascii to bytes,hex也是16进制的意思,a2b_hex方法和unhexlify方法是相同的。
print("hex转为utf-16-be为:", coded, '\n')
content = coded.decode('utf-16-be')
print("utf-16-be解码后的原文本为:", content, '\n')

你可能感兴趣的:(Python)