Python3 字符串、數字、二進制bytes互相轉換

Python3 字符串、數字、二進制互相轉換

.0.1. 2019-01-29 11:10:26  6714  收藏 6
分類專欄: python
版權聲明:本文爲博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/PanDD_0_1/article/details/86687140
收起
 
數字
    整數 -1 0 1
    浮點 -0.1 0.0 1.0
    二進制 0b11        結果 3
    八進制 0o77        結果 63
    16進制 0xFF        結果 255
 
字符串 <class 'str'>
    純字符串 'str' "str" '''str''' """str"""
    字符串數字(二進制 0b) '0b0'     轉成字符 str(0b10) 結果 '2'     ## 可以前置補零str(0b00000010)
    字符串數字(八進制 0o) '0o0'     轉換字符 str(0o77) 結果 '63'    ## 可以前置補零str(0o0077)
    字符串數字(十進制)    '0'       轉換字符 str(100)  結果 '100'   ## 不能前置補零
    字符串數字(16進制 0x) '0x0'     轉換字符 str(0xFF) 結果 '255'   ## 可以前置補零str(0x00FF)
二進制 <class 'bytes'>
    二進制字節表示 b''    # ASCII 字符 0-9 a-z A-Z 等
================================================================================================================================
## 數字 轉 字符串 ##  255(10進制)  0b11(2進制)  0xFF(16進制)
## (10進制數)
>>> bin(255)            '0b11111111'
>>> oct(255)            '0o377'
>>> hex(255)            '0xff'
## (2進制數)
>>> bin(0b11)           '0b11'
>>> hex(0xFF)           '0xff'
## (16進制數)
>>> bin(0xFF)           '0b11111111'
>>> hex(0xFF)           '0xff'
================================================================================================================================
## 字符串 轉 數字(十進制數)##  '123'(以10進制解析)  '10'(以2進制解析)  'a'(以16進制解析)
## (10進製表示的字符串)
>>> int('123')          123         ## 十進制字符轉十進制數字
>>> int('123',10)       123         ## 默認是十進制
## (二進制表示的字符串)
>>> int('100',2)        4           ## 二進制的 100 等於 十進制的 4(可以不加前置 0b)
>>> int('0b100',2)      4           ## 二進制的 100 等於 十進制的 4
>>> int('0b0100',2)     4           ## 可以前置補零
## (16進製表示的字符串)
>>> int('a',16)         10          ## 16進制的 a 等於 十進制的 10(可以不加前置 0x)
>>> int('0xa',16)       10          ## 16進制的 a 等於 十進制的 10
>>> int('0x0a',16)      10          ## 16進制的 a 等於 十進制的 10(可以前置補零)
>>> int('10',16)        16          ## 16進制的10 等於 十進制的 16(可以不加前置 0x)
>>> int('0x10',16)      16          ## 16進制的10 等於 十進制的 16
>>> int('0x0010',16)    16          ## 16進制的10 等於 十進制的 16(可以前置補零)
================================================================================================================================
## 數字 轉 數字 ##  0b11  0xFF
## 十進制 轉 十進制
>>> int(255)            255         # 無意義操作
>>> 255                 255         # 無意義操作
## 二進制 轉 十進制
>>> int(0b11)           3           # 可加前置零 int(0b0011)
>>> 0b11111111          255         # 等價
## 16進制 轉 十進制
>>> int(0xFF)           255
>>> 0xff                255         # 等價 且 忽略大小寫
>>> 0xFF                255         # 等價 且 忽略大小寫
## 十進制 轉 二進制(使用 數字 轉 字節碼/字符)
255 等價 0b11111111
## 十進制 轉 16進制(使用 數字 轉 字節碼/字符)
255 等價 0xff
================================================================================================================================
## 字符串 轉 字節碼 ##
>>> bytes('abc','utf-8')              b'abc'
>>> bytes('編程','utf-8')             b'\xe7\xbc\x96\xe7\xa8\x8b'
>>> bytes('Python3編程','utf-8')      b'Python3\xe7\xbc\x96\xe7\xa8\x8b'
>>> 'Python3編程'.encode('UTF-8')     b'Python3\xe7\xbc\x96\xe7\xa8\x8b'
>>> S = 'Python3編程'                 'Python3編程'
>>> B = bytes(S,'utf-8')              b'Python3\xe7\xbc\x96\xe7\xa8\x8b'
>>> FMT = str(len(B)) + 's'           '13s'
>>> struct.pack(FMT,B)                b'Python3\xe7\xbc\x96\xe7\xa8\x8b'
## 以16進制數字寫的字符串,直接轉成一樣的字節碼(2個16進制字符纔是一個字節)
>>> bytes.fromhex('01')               b'\x01'                       # 單字節
>>> bytes.fromhex('0001')             b'\x00\x01'                   # 雙字節
>>> bytes.fromhex('aabbccddeeff')     b'\xaa\xbb\xcc\xdd\xee\xff'   # 多字節
================================================================================================================================
## 字節碼 轉 字符串 ##  取出16進製表示的內容
>>> b'abc'.decode('UTF-8')                                  'abc'
>>> b'Python3\xe7\xbc\x96\xe7\xa8\x8b'.decode('UTF-8')      'Python3編程'
>>> b'\xaa\xbb\xcc\xdd\xee\xff'.hex()                       'aabbccddeeff'
>>> b'0'.hex()                                              '30'    ## 字符0在ASCII碼上的數字(數字是16進製表示)== 48(十進制)
>>> b'1'.hex()                                              '31'
>>> b'z'.hex()                                              '7a'
================================================================================================================================
## 數字 轉 字節碼(是二進制,用16進制顯示) ##
# 10進制數 轉 字節碼
import struct
>>> struct.pack('B',0)          b'\x00'
>>> struct.pack('B',1)          b'\x01'
>>> struct.pack('B',101)        b'e'                    ## 101 對應 16進制的 0x65(此處返回值是顯示爲當前整數 101 對應的 ASCII字符 e)
>>> struct.pack('B',255)        b'\xff'                 # 無符號最大單字符可以表示的數字
>>> struct.pack('>i',255)       b'\x00\x00\x00\xff'     # 4字節大端表示的數字
>>> struct.pack('<i',255)       b'\xff\x00\x00\x00'     # 4字節小端表示的數字
# 2進制數 轉 字節碼
import struct
>>> struct.pack('B',0b11111111)     b'\xff'
>>> struct.pack('>i',0b111)         b'\x00\x00\x00\x07'     # 0b111 等於 7(10進制)
>>> struct.pack('>i',0b1111)        b'\x00\x00\x00\x0f'     # 0b1111 等於 15(10進制)
>>> struct.pack('>i',0b11111)       b'\x00\x00\x00\x1f'     # 0b11111 等於 31(10進制)
# 16進制數 轉 字節碼
import struct
>>> struct.pack('B',0xff)           b'\xff'
>>> struct.pack('>i',0xfff)         b'\x00\x00\x0f\xff'
================================================================================================================================
## 字節碼 轉 數字 ##
import struct          16進製表現                10進制等值
>>> struct.unpack('B', b'\xff')                      (255,)          # 單字節
>>> struct.unpack('>i', b'\x00\x00\x00\xff')         (255,)          # 4字節,大端模式
>>> struct.unpack('<i', b'\x00\x00\x00\xff')         (-16777216,)    # 4字節,小端模式
## 手動 轉換
字節碼 -> 字符串
>>> B = b'\xe9'
>>> S = B.hex()
>>> S                                               # 值 'e9'
字符串(16進制格式)-> 數字(10進制)
>>> int(S,16)                                       # 值 233
================================================================================================================================
################################################################################################################################
################################################################################################################################
################################################################################################################################
################################################################################################################################
################################################################################################################################
################################################################################################################################
################################################################################################################################
################################################################################################################################
## ASCII 字符 和 數字
字節    b'\x05'
字符串   '\x05'
## 將一個整數 (0-1114111) 轉換爲 一個字符(整數對應的 ASCII 字符)
## ValueError: chr() arg not in range(0x110000)
>>> chr(0)                  '\x00'
>>> chr(1)                  '\x01'
>>> chr(97)                 'a'
>>> chr(1114111)            '\U0010ffff'
>>> len(chr(101))           1  # 長度爲 1個字符
>>> len(chr(1114111))       1  # 長度爲 1個字符
 
## 將一個 ASCII字符 轉換爲 一個整數
>>> ord('\x00')             0
>>> ord('\x01')             1
>>> ord('a')                97
>>> ord('0')                48
>>> ord('1')                49
>>> ord('A')                65
>>> ord('Z')                90
>>> ord('\U0010ffff')       1114111
 
################################################################################################################################
################################################################################################################################
 
## ASCII 字符 和 bin(字節)
 
from binascii import b2a_hex, a2b_hex
>>> a2b_hex('ab')
b'\xab'
 
>>> b2a_hex(b'ab')
b'6162'
>>> a2b_hex(b'6162')

————————————————
版權聲明:本文爲CSDN博主「.0.1.」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/PanDD_0_1/article/details/86687140

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章