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)