zoukankan      html  css  js  c++  java
  • 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 '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系统语法有着非常深入的了解了

  • 相关阅读:
    dayⅦ:元组、字典的其他操作+集合类型
    dayⅥ:作业
    dayⅥ:字符串操作+列表操作
    dayⅣ:赋值运算+if判断
    dayⅣ:赋值运算+if判断作业
    dayⅢ、基本数据类型+运算符
    爬虫解析bs4
    爬虫请求库之requests库
    爬虫原理
    各主流Linux系统解决方案pip安装mysqlclient报错
  • 原文地址:https://www.cnblogs.com/walkerwang/p/2118332.html
Copyright © 2011-2022 走看看