欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中字節(jié)數(shù)組和16進(jìn)制字符串轉(zhuǎn)換方式

 更新時(shí)間:2023年06月03日 15:37:54   作者:EUNC  
這篇文章主要介紹了Python中字節(jié)數(shù)組和16進(jìn)制字符串轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Python字節(jié)數(shù)組和16進(jìn)制字符串轉(zhuǎn)換

參考示例1

以下示例僅供參考,性能高低以實(shí)際測(cè)試情況為準(zhǔn),這里只考慮能否實(shí)現(xiàn)數(shù)據(jù)轉(zhuǎn)換

字節(jié)(bytes)轉(zhuǎn)字符串(str)

rec_msg = b'\x12\x55\xaa\xFF\x55\x34'
out_s = '' ?
for i in range(0, len(rec_msg)): ? ? # 獲取字節(jié)數(shù)組字?jǐn)?shù)據(jù),注意引號(hào) ' ' 之間有一個(gè)空格
? ? out_s = out_s + ' ' + (hex(int(rec_msg[i]))).upper()[2:].zfill(2)
print(out_s) ? ?# >>> 12 55 AA FF 55 34

轉(zhuǎn)換原理解析:分離出byte,轉(zhuǎn)為int(), 再hex()轉(zhuǎn)回16進(jìn)制數(shù)后截取0x前綴,再遍歷拼接成字符串

參考示例2

在例子中對(duì)指定的字符串:

faa5fbb5fcc5fdd5010200000028000001900000000a002d00000000017d7840000003e800005fa55fb55fc55fd5

使用了三種方法將其轉(zhuǎn)換為大寫字母并每隔2個(gè)字符用空格分割處理后得到一個(gè)新字符串,為: 

FA A5 FB B5 FC C5 FD D5 01 02 00 00 00 28 00 00 01 90 00 00 00 0A 00 2D 00 00 00 00 01 7D 78 40 00 00 03 E8 00 00 5F A5 5F B5 5F C5 5F D5

為驗(yàn)證三種方法的執(zhí)行效率,對(duì)原字符串?dāng)U充為其100倍長(zhǎng)度,然后執(zhí)行10000次處理,從其耗時(shí)結(jié)果上看,第一種方法最慢,第二、三種方法較好。

# -*- coding: utf-8 -*-#
#-------------------------------------------------------------------------------
# Name: ? ? ? ? MySplit
# Description: ?將指定的字符串轉(zhuǎn)換為大寫字母并每隔2個(gè)字符用空格分割后得到一個(gè)新字符串
# Author: ? ? ? Administrator
# Date: ? ? ? ? 2018/7/6
#-------------------------------------------------------------------------------
import re
import time
#待分割字符串
myStr = 'faa5fbb5fcc5fdd5010200000028000001900000000a002d00000000017d7840000003e800005fa55fb55fc55fd5'
#分割后: FA A5 FB B5 FC C5 FD D5 01 02 00 00 00 28 00 00 01 90 00 00 00 0A 00 2D 00 00 00 00 01 7D 78 40 00 00 03 E8 00 00 5F A5 5F B5 5F C5 5F D5
def mySplit1(str):
? ? t=''
? ? for i in range(len(str)/2):
? ? ? ? t += str[2*i:2*(i+1)] + ' '
? ? t = t.upper()
? ? return t
def mySplit2(str):
? ? t = str.upper()
? ? p = re.compile('.{1,2}') ?# 匹配任意字符1-2次
? ? return ' '.join(p.findall(t))
def mySplit3(str):
? ? t = str.upper()
? ? return ' '.join([t[2*i:2*(i+1)] for i in range(len(t)/2)])
print('原始字符串:\n' + myStr + '\n')
print('轉(zhuǎn)換后字符串:')
print('mySplit1: ' + mySplit1(myStr))
print('mySplit2: ' + mySplit2(myStr))
print('mySplit3: ' + mySplit3(myStr))
print(u'\n耗時(shí)測(cè)試:')
myStr = myStr * 100
for f in [mySplit1, mySplit2, mySplit3]:
? ? t = time.time()
? ? for i in range(10000):
? ? ? ? f(myStr)
? ? print(f.func_name + ': ' + str(time.time()-t) + ' s')

假設(shè): 

hex_string = “deadbeef”

轉(zhuǎn)換成字符串格式

>>> hex_data = hex_string.decode("hex")
>>> hex_data
"\xde\xad\xbe\xef"

轉(zhuǎn)換成字節(jié)數(shù)組

>>> import array
>>> array.array('B', hex_data)
array.array('B', [0xDE, 0xAD, 0xBE, 0xEF])

轉(zhuǎn)換成字節(jié)列表

>>> map(ord, hex_data)
[0xDE, 0xAD, 0xBE, 0xEF]

如果是2.6以后版本:

>>> bytearray(hex_data)
bytearray(b'\xde\xad\xbe\xef')

然而有可能出現(xiàn)無法打印的字符串,例如:\x12\x45\x00AB 

這種情況下:不要用.decode(“hex”)

下面的將返回bytearray,并在python3中正常工作 

bytearray.fromhex(“de ad be ef 00”)

使用binascii

import binascii
a='45222e'
s=binascii.unhexlify(a)
b=[ord(x) for x in s]

直接編寫程序

data = "fef0babe"
bits = ""
for x in xrange(0, len(data), 2)
? ? bits += chr(int(data[x:x+2], 16))

還原byte型字符串 

binascii.b2a_hex(hex_data)

Python簡(jiǎn)單的16進(jìn)制轉(zhuǎn)字符串

Python以字符串形式存在的16進(jìn)制數(shù),轉(zhuǎn)為該16進(jìn)制對(duì)應(yīng)的ascii字符串比較麻煩。

如:

hex_str = ‘7468616e6b20796f752076657279206d75636821' # thank you very much!

首先要將其轉(zhuǎn)為16進(jìn)制數(shù)

hex = hex_str.encode(‘utf-8')

然后再轉(zhuǎn)為字符串

str_bin = binascii.unhexlify(hex)
str = str_bin.decode(‘utf-8')

函數(shù):

import binascii
def hexStr_to_str(hex_str):
    hex = hex_str.encode('utf-8')
    str_bin = binascii.unhexlify(hex)
    return str_bin.decode('utf-8')
if __name__ == "__main__":
	hex_str = '7468616e6b20796f752076657279206d75636821' 
	print(hexStr_to_str(hex_str))

簡(jiǎn)單方法來了

我們知道,base16編碼就是將字符用16進(jìn)制表示

'a' =base16=> b'61'

那么簡(jiǎn)單對(duì)16進(jìn)制字符串進(jìn)行base16解碼即可

import base64
hex_str = '7468616e6b20796f752076657279206d75636821'?
print(base64.b16decode(hex_str.upper()))

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用Playwright進(jìn)行視覺回歸測(cè)試詳解

    使用Playwright進(jìn)行視覺回歸測(cè)試詳解

    這篇文章主要介紹了使用Playwright進(jìn)行視覺回歸測(cè)試詳解,視覺回歸測(cè)試是一種軟件測(cè)試技術(shù),專注于檢測(cè)Web應(yīng)用程序或網(wǎng)站的用戶界面中的視覺變化和差異,需要的朋友可以參考下
    2023-08-08
  • 淺析python多線程中的鎖

    淺析python多線程中的鎖

    這篇文章主要介紹了淺析python多線程中的鎖,鎖由Python的threading模塊提供,并且它最多被一個(gè)線程所持有,當(dāng)一個(gè)線程試圖獲取一個(gè)已經(jīng)鎖在資源上的鎖時(shí),該線程通常會(huì)暫停運(yùn)行,直到這個(gè)鎖被釋放,需要的朋友可以參考下
    2023-07-07
  • 如何用Python Beautiful?Soup解析HTML內(nèi)容

    如何用Python Beautiful?Soup解析HTML內(nèi)容

    Beautiful Soup是一種Python的解析庫,主要用于解析和處理HTML/XML內(nèi)容,詳細(xì)介紹Beautiful Soup的使用方式和應(yīng)用場(chǎng)景,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • python制圖之小提琴圖示例代碼

    python制圖之小提琴圖示例代碼

    這篇文章主要介紹了python制圖之小提琴圖的相關(guān)資料,提琴圖結(jié)合箱線圖和核密度估計(jì),展示數(shù)據(jù)分布和概率密度,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • python網(wǎng)絡(luò)編程之進(jìn)程詳解

    python網(wǎng)絡(luò)編程之進(jìn)程詳解

    這篇文章主要為大家介紹了python網(wǎng)絡(luò)編程之進(jìn)程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • 詳解Python中open()函數(shù)指定文件打開方式的用法

    詳解Python中open()函數(shù)指定文件打開方式的用法

    well,我們這里所指的文件打開方式并不是指調(diào)用什么應(yīng)用程序去打開某個(gè)文件,而是只讀只寫或者二進(jìn)制等的打開方式,這里我們就來詳解Python中open()函數(shù)指定文件打開方式的用法
    2016-06-06
  • Python中實(shí)現(xiàn)常量(Const)功能

    Python中實(shí)現(xiàn)常量(Const)功能

    這篇文章主要介紹了Python中實(shí)現(xiàn)常量(Const)功能,python語言本身沒有提供const,本文使用一個(gè)類來實(shí)現(xiàn)常量定義功能,并介紹了使用方法,需要的朋友可以參考下
    2015-01-01
  • Python根據(jù)指定日期計(jì)算后n天,前n天是哪一天的方法

    Python根據(jù)指定日期計(jì)算后n天,前n天是哪一天的方法

    這篇文章主要介紹了Python根據(jù)指定日期計(jì)算后n天,前n天是哪一天的方法,涉及Python日期與時(shí)間計(jì)算相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • python3 圖片 4通道轉(zhuǎn)成3通道 1通道轉(zhuǎn)成3通道 圖片壓縮實(shí)例

    python3 圖片 4通道轉(zhuǎn)成3通道 1通道轉(zhuǎn)成3通道 圖片壓縮實(shí)例

    今天小編就為大家分享一篇python3 圖片 4通道轉(zhuǎn)成3通道 1通道轉(zhuǎn)成3通道 圖片壓縮實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 12步教你理解Python裝飾器

    12步教你理解Python裝飾器

    或許你已經(jīng)用過裝飾器,它的使用方式非常簡(jiǎn)單但理解起來困難(其實(shí)真正理解的也很簡(jiǎn)單),想要理解裝飾器,你需要懂點(diǎn)函數(shù)式編程的概念,python函數(shù)的定義以及函數(shù)調(diào)用的語法規(guī)則等,感興趣的小伙伴們可以參考一下
    2016-02-02

最新評(píng)論