bytearraypython
A. python怎麼處理二進制流
可以的,二進制是計算機內的表示方法,處理二進制數據是最基本的能力。
如果是二進制字元串轉十進制:
>>>
x
=
'10101010'
>>>
int(x,
2)
170
如果是從文件或網路中獲取的數據,要知道某一位是0還是1的話,獲取的數據可以按字元讀取,由於一個字元由8位二進製表示,分別讀取1到8位的二進制值就可以了:
>>>
get_char_bit
=
lambda
char,
n:
(char
>>
(8-n))
&
1
#
從高到低分別為第1~8位
>>>
data
=
b'ab'
#
在python3中字元串默認是unicode,所以加上b前綴兼容
>>>
#
在python3中按字元讀取byte字元串是數字,而python2讀出來的卻是字元,但bytearray是一致的都是數字
>>>
data
=
bytearray(data)
>>>
result
=
[]
>>>
for
char
in
data:
for
i
in
range(1,
9):
result.append(get_char_bit(char,
i))
>>>
result
[0,
1,
1,
0,
0,
0,
0,
1,
0,
1,
1,
0,
0,
0,
1,
0]
B. 求助:python如何按位解析二進制數據
可以的,二進制是計算機內的表示方法,處理二進制數據是最基本的能力。
如果是二進制字元串轉十進制:
>>>x='10101010'
>>>int(x,2)
170
如果是從文件或網路中獲取的數據,要知道某一位是0還是1的話,獲取的數據可以按字元讀取,由於一個字元由8位二進製表示,分別讀取1到8位的二進制值就可以了:
>>>get_char_bit=lambdachar,n:(char>>(8-n))&1#從高到低分別為第1~8位
>>>data=b'ab'#在python3中字元串默認是unicode,所以加上b前綴兼容
>>>#在python3中按字元讀取byte字元串是數字,而python2讀出來的卻是字元,但bytearray是一致的都是數字
>>>data=bytearray(data)
>>>result=[]
>>>forcharindata:
foriinrange(1,9):
result.append(get_char_bit(char,i))
>>>result
[0,1,1,0,0,0,0,1,0,1,1,0,0,0,1,0]
還有一種比較簡單的方法是使用內置的bin函數
>>>data=bytearray(b'ab')
>>>result=[]
>>>forcharindata:
result.extend(bin(char)[2:].rjust(8,'0'))
>>>result
['0','1','1','0','0','0','0','1','0','1','1','0','0','0','1','0']
C. 請教Python3 bytearray 的問題
以前在 python2 中 a=bytes(bytearray((182,)))結果是 a='\xb6'
現在在 Python3 運行結果是 a=b'\xb6',嘗試各種 a.decode()均失敗了,請問如何能在 Python3 得到和 Python2 一樣的結果呢?
1. Python3 裡面的 str 已經是 unicode str 了。
2. bytes(bytearray((182,)))你用的就是 bytes 函數,所以理所當然的,無論 py2 還是 py3 都返回 bytes 類型,只不過 py2 時 bytes==str 而已。
3. 如果你想得到的是 latin_1 編碼的\xb6 代表的 str,請用.decode('latin-1')
D. 判斷python中哪些數據是只讀數據類型
不可變數據類型是:變數所指向的內存地址處的值是不可以被改變的。
可變數據類型是:變數所指向的內存地址處的值是可以被改變的。
python的列表類似於 C 語言中的數組,是一種線性的數據結構,與 C 語言的數組不同地是,Python 中的列表可以存儲不同的數據類型,列表內部也可以嵌套列表。
Python 的元組與列表類似,不同之處在於元組的元素不能修改。元組使用小括弧,列表使用方括弧。元組創建很簡單,只需要在括弧中添加元素,並使用逗號隔開即可。
元組的元素不能修改,其實是指元組中的元素所指向的內存地址是不可更改的,如果元組的元素是可變數據類型,則該元素的值是可以改變的。
python的集合 set 是一個無序不重復元素集,基本功能包括關系測試和消除重復元素.。集合對象還支持 union (聯合), intersection (交), difference (差) 和 sysmmetric difference (對稱差集)等數學運算。
E. python中如何定義成員為bytearray的數組
1、Python數組的變數是不需要定義的,這方面和php一樣,它比javascript還是寬松,不過它是用縮進作為段落標識的,作為習慣了C語言風格語法的人,可能一開始會很不習慣使用。
但細一想,其實也是很正常,很合理的。
2、雖然Python在面向過程/面向對象方面也是很寬松,但實際上一般的程序都是一個主入口。
3、然後不斷調用其它類庫或函數,所以用縮進的方式並無不妥,那樣一方面要求用戶寫代碼時要規范,另一方面反向省去了多餘的{}。
4、與C語言風格相比,Python主要語法特點而下:
變數、字元串在python中,所有變數都是對象,數組其實是一個鏈表,並且可以進行相應的鏈表操作。對於普通數據類型,定義/賦值方法都是一樣的
F. python怎麼將bytearray轉換成字元串
str(bytearray, encoding)
G. bython bytearray怎麼存文件
importcv2
img=cv2.imread("test.jpg",cv2.IMREAD_GRAYSCALE)
#等效於img=cv2.imread("test.jpg",0)
print(img.shape)
#顯示轉換為標准一維pythonbytearray
bytearray1=bytearray(img)
H. Python基本內置數據類型有哪些
內置類型是指任何語言在設計初期定義的類型,如C語言中的int、double、char等。它也是在一種語言中最基本的類型,與編譯器編譯出的代碼具有重大關系。值得一提的是,不同語言也擁有不同的內置類型, 但是所有內置類型的定義都與計算機的運算方式相關。
Python主要內置類型包括數值、序列、映射、類、實例和異常等。
數值類型:全局中只有一個(Python在解釋器啟動的時候,Python會用None類型生成一個None的對象),包括int類型、float類型、complex類型、bool類型。
迭代類型:在Python中,迭代類型可以使用循環來進行遍歷。
序列類型:list(是可變序列,通常用於存放同類項目的集合)、tuple(是不可變序列,通常用於儲存異構數據的多項集)、str(在Python中處理文本數據是使用str對象,也稱為字元串。字元串是由Unicode碼位構成的不可變序列。)、array、range(表示不可變的數字序列,通常用於在for循環中循環指定的次數)、bytes(由單個位元組構成的不可變序列)、bytearray(bytes對象的可變對應物)、memoryvie(二進制序列)
映射類型:映射對象將具有hash的值映射到任意對象。映射是可變的對象。目前只有一種標准映射,即dictionary。字典的鍵幾乎是任意值,也就是說,包含列表、字典或其他可變類型的值。
集合類型:作為一種無序的多項集,集合並不記錄元素位置或插入順序。相應地,集合不支持索引、切片或其他序列類的操作。目前Python有兩種內置集合類型:set和frozenset。
set類型是可變的,其內容可以使用add()和remove()這樣的方法來改變。由於是可變類型,它沒有哈希值,且不能被用作字典的鍵或其他集合的元素。
frozenset類型是不可變並且具有哈希值,其內容在被創建後不能再改變,因此它可以被用作字典的鍵或其他集合的元素。
上下文管理類型:with語句
其他類型:模塊、class、實例、函數、方法、代碼、object對象、type對象、ellipsis(省略號)、notimplemented
I. python的builtin function 中的bytearray方法該如何使用
使用引入是
from
time
import
*,引入換成
import
time。
1、
就是調用時類型錯誤撒,把相關語句出來看看。
2、這個問題偶爾會出現。通常是下標變數越界。比如list里有5個元素,你要取第6個元素,當然就沒了。
也有可能你自己誤以為它是個字典,你也按字典的語法寫的,陰差陽錯,程序以為你在使用一個數組,這時也會出現下標越界的錯誤。
3、也許把你有問題的代碼貼出來更好。
J. Python位元組,每位元組的異或解密問題,怎麼解決
1.先將int轉為hex字元串,去掉'0x',然後對位數判斷,比如1-->0x01(而不是0x1),22-->0x16;
2.直接將字元串轉為bytearray,比如'0x123456'-->0x12 x34 x56(忽略轉義表示,此處只是討論使用方法);
3.直接將bytearray轉為bytes
defhexPos(num):
val=hex(int(num))[2:]
iflen(val)%2!=0:
val='0'+val
y=bytearray.fromhex(val)
iflen(y)!=4:
x=bytearray(4-len(y))
returnbytes(x+y)