python⼆进制数组_python和⼆进制数组
⽹上查了很多,都是⽤了struct来进⾏打包和解包,内容请⾃⼰⾏google,可是并不是我要的结果,我不过是要把⼀段字符串直接转化成byte[],没有那么严格的每⼀个位置进⾏定义的需求,搜来搜去,发现python2.6已经直接⽀持⼆进制数组:
由于还不是⾮常明⽩,测试如下
>>> s1="中华⼈民共和国"
>>> s1
'\xd6\xd0\xbb\xaa\xc8\xcb\xc3\xf1\xb9\xb2\xba\xcd\xb9\xfa'
>>> list(s1)
['\xd6', '\xd0', '\xbb', '\xaa', '\xc8', '\xcb', '\xc3', '\xf1', '\xb9', '\xb2', '\xba', '\xcd', '\xb9', '\xfa']
>>> s2=b"中华⼈民共和国"
>>> s2
'\xd6\xd0\xbb\xaa\xc8\xcb\xc3\xf1\xb9\xb2\xba\xcd\xb9\xfa'
>>> list(s2)
['\xd6', '\xd0', '\xbb', '\xaa', '\xc8', '\xcb', '\xc3', '\xf1', '\xb9', '\xb2', '\xba', '\xcd', '\xb9', '\xfa']
>>> s3=u"中华⼈民共和国"
>>> s3
u'\xd6\xd0\xbb\xaa\xc8\xcb\xc3\xf1\xb9\xb2\xba\xcd\xb9\xfa'
>>> list(s3)
[u'\xd6', u'\xd0', u'\xbb', u'\xaa', u'\xc8', u'\xcb', u'\xc3', u'\xf1', u'\xb9', u'\xb2', u'\xba', u'\xcd', u'\xb9', u'\xfa']
>>> s4=bytearray("中华⼈民共和国")
>>> s4
bytearray(b'\xd6\xd0\xbb\xaa\xc8\xcb\xc3\xf1\xb9\xb2\xba\xcd\xb9\xfa')
>>> list(s4)
[214, 208, 187, 170, 200, 203, 195, 241, 185, 178, 186, 205, 185, 250]
>>> #演⽰把byte变为sbyte
>>> s5=[i if i<128 else i-256 for i in s4]
>>> s5
[-42, -48, -69, -86, -56, -53, -61, -15, -71, -78, -70, -51, -71, -6]
>>>
>>> type(s1)
>>> type(s2)
python 定义数组>>> type(s3)
>>> type(s4)
>>> type(s5)
>>>
⼩技巧,上⾯的⽰例中,把byte转为sbyte⽤了列表映射和“三元表达式”,当然python中是没有三元表达式的,所以我⽤的语法是if else,
当然灵活地⽤and-or组合,同样可以达到效果:
s5=[i<128 and i-256 or i for i in s4]
#此处有⼀个bug,即i为零和256时会出错,鉴于256不会出现,那么就处理0值:
s5=[i<128 and i!=0 and i-256 or i for i in s4]
当然这需要对and-or系统语法有着⾮常深⼊的了解了
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论