python 字节序

阮一峰 – 理解字节序

获取字节顺序

import sys

endianness = sys.byteorder
print("system Endianness is "+ endianness)

大小端转换


"6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000".decode('hex')[::-1].encode('hex_codec') 
#=> 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f

000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f

import struct

ver = 1
prev_block = "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f"
mrkl_root = "0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098"
time = 1231469665
bits = 486604799
nonce = 2573394689

struct.pack("<L", ver) #转换为 unsigned long型小端
prev_block.decode('hex')[::-1] # 转换为16进制并大小端转换
mrkl_root.decode('hex')[::-1] # 转换为16进制并大小端转换
struct.pack("<LLL", time, bits, nonce) # 把3个变量转换为 unsigned long型小端

struct

在struct中有以下几种字节顺序

CharacterByte orderSizeAlignment
@nativenativenative
=nativestandardnone
<little-endianstandardnone
>big-endianstandardnone
!network (= big-endian)standardnone
字符字节顺序尺寸对齐方式
@本机本机本机
=本机标准
<小端标准
>大端标准
网络即大端标准

数据格式

FormatC TypePython typeStandard sizeNotes
xpad byteno value
ccharbytes of length 11
bsigned charinteger1(1),(3)
Bunsigned charinteger1(3)
?_Boolbool1(1)
hshortinteger2(3)
Hunsigned shortinteger2(3)
iintinteger4(3)
Iunsigned intinteger4(3)
llonginteger4(3)
Lunsigned longinteger4(3)
qlong longinteger8(2), (3)
Qunsigned long
longinteger8(2), (3)
nssize_tinteger(4)
Nsize_tinteger(4)
e(7)float2(5)
ffloatfloat4(5)
ddoublefloat8(5)
schar[]bytes
pchar[]bytes
Pvoid *integer(6)
字符C类型python类型标准尺寸
x填充字节没有意义的值
cchar长度为1的字节1
bsigned char整型1
Bunsigned char整型1
_Bool布尔1
hshort整型2
Hunsigned short整型2
iint整型4
Iunsigned int整型4
llong整型4
Lunsigned long整型4
qlong long整型8
Qunsigned long long整型8
nssize_t整型
Nsize_t整型
e浮动2
ffloat浮动4
ddouble浮动8
schar[]字节
pchar[]字节
Pvoid *整型

参考:

https://en.wikipedia.org/wiki/Endianness
https://docs.python.org/3/library/struct.html
https://blog.csdn.net/youand_me/article/details/78890316

    原文作者:shooter
    原文地址: https://www.jianshu.com/p/7623cec7620a
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞