阮一峰 - 理解字節(jié)序
獲取字節(jié)順序
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中有以下幾種字節(jié)順序
Character | Byte order | Size | Alignment |
---|---|---|---|
@ | native | native | native |
= | native | standard | none |
< | little-endian | standard | none |
> | big-endian | standard | none |
! | network (= big-endian) | standard | none |
字符 | 字節(jié)順序 | 尺寸 | 對齊方式 |
---|---|---|---|
@ | 本機 | 本機 | 本機 |
= | 本機 | 標準 | 無 |
< | 小端 | 標準 | 無 |
> | 大端 | 標準 | 無 |
! | 網絡即大端 | 標準 | 無 |
數據格式
Format | C Type | Python type | Standard size | Notes |
---|---|---|---|---|
x | pad byte | no value | ||
c | char | bytes of length 1 | 1 | |
b | signed char | integer | 1 | (1),(3) |
B | unsigned char | integer | 1 | (3) |
? | _Bool | bool | 1 | (1) |
h | short | integer | 2 | (3) |
H | unsigned short | integer | 2 | (3) |
i | int | integer | 4 | (3) |
I | unsigned int | integer | 4 | (3) |
l | long | integer | 4 | (3) |
L | unsigned long | integer | 4 | (3) |
q | long long | integer | 8 | (2), (3) |
Q | unsigned long | |||
long | integer | 8 | (2), (3) | |
n | ssize_t | integer | (4) | |
N | size_t | integer | (4) | |
e | (7) | float | 2 | (5) |
f | float | float | 4 | (5) |
d | double | float | 8 | (5) |
s | char[] | bytes | ||
p | char[] | bytes | ||
P | void * | integer | (6) |
字符 | C類型 | python類型 | 標準尺寸 |
---|---|---|---|
x | 填充字節(jié) | 沒有意義的值 | |
c | char | 長度為1的字節(jié) | 1 |
b | signed char | 整型 | 1 |
B | unsigned char | 整型 | 1 |
紊遵? | _Bool | 布爾 | 1 |
h | short | 整型 | 2 |
H | unsigned short | 整型 | 2 |
i | int | 整型 | 4 |
I | unsigned int | 整型 | 4 |
l | long | 整型 | 4 |
L | unsigned long | 整型 | 4 |
q | long long | 整型 | 8 |
Q | unsigned long long | 整型 | 8 |
n | ssize_t | 整型 | |
N | size_t | 整型 | |
e | 浮動 | 2 | |
f | float | 浮動 | 4 |
d | double | 浮動 | 8 |
s | char[] | 字節(jié) | |
p | char[] | 字節(jié) | |
P | void * | 整型 |
參考:
https://en.wikipedia.org/wiki/Endianness
https://docs.python.org/3/library/struct.html
https://blog.csdn.net/youand_me/article/details/78890316