python和二进制数组

来源:互联网 时间:1970-01-01

网上查了很多,都是用了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"中华人民共和国">>> s3u'/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("中华人民共和国")>>> s4bytearray(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 'str'>>>> type(s2)<type 'str'>>>> type(s3)<type 'unicode'>>>> type(s4)<type 'bytearray'>>>> type(s5)<type 'list'>>>> 

小技巧,上面的示例中,把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系统语法有着非常深入的了解了

绿色通道:好文要顶关注我收藏该文与我联系

相关阅读:
Top