电脑上装了Python2.7和3.3两个版本,平时运行程序包括在Eclipse里面调试都会使用2.7,但是由于某些原因在cmd命令行中输入python得到的解释器则是3.3,

  一直没对此做处理,因为这样可以对两个版本的差异有一个测试,而且虚拟机里面是2.7以下的版本。

  今天想到需要几个脚本做常用的编码转换,这样在没有其他工具的情况下也可以进行转换,不多说上正文:

  首先是2.7版本下:

  2.7版本下进行转换还是很方便的,hex2char:output = 'data'.decode('hex')

                   char2hex: output = '64617461'.encode('hex')

  真的是只需要用到字符串的decode和encode方法就Ok了,因此,因此如果我需要在命令行下运行,可以这样写:

import sys

choose = sys.argv[1]
data = sys.argv[2] def hex2char():
    output = data.decode('hex')
    print output
 
def char2hex():
    output = data.encode('hex')
    print output print "Usage:  <filename> <hex2char or char2hex> <your data>" if len(sys.argv) == 3:
    if choose.lower() == 'hex2char':
        hex2char()
       
    if choose.lower() == 'char2hex':
        char2hex()
    
    if choose.lower()!='hex2char' and choose.lower()!='char2hex':
        print "Wrong param,try again"
else:
    print "Wrong number of params,check your input\n" #this script has passed the test

这段代码在2.7的环境下测试已经通过,可以进行十六进制与字符串之间的转换,如果觉得还不太好用,可以对代码进行修改修改

但是在3.0以上环境有很多用法则是不再被支持的,如果使用str.encode('hex'),则会报错:

Traceback (most recent call last):
  File "<pyshell#26>", line 1, in <module>
    'data'.encode('hex')
LookupError: unknown encoding: hex

有些人可能会说'hex'应该为"hex",或者说遇到没有()的情况,实际上Python中单引号和双引号是没什么区别的,例如:

ord('a')==97 ,ord("a")==97都是成立的

然后是3.0以上环境:

3.0环境比较常用的是binascii模块,关于这个模块的一些函数和方法可以查找手册,这里且说对于十六进制和字符串的转换

先贴代码:

def hex2char(data):
#    binascii.a2b_hex(hexstr)
    output = binascii.unhexlify(data)
    print(output) def char2hex(data):
    data = b'data'
#    binascii.b2a_hex(data)
    output = binascii.hexlify(data)
    print(output)

这两个函数与上述代码有着相同的功能,代码中有两行注释,表明binascii.a2b_hex(hexstr)和binascii.unhexlify(hexstr)在功能上是等价的,另一个同样

这里十六进制转字符串直接调用就可以了,但是当直接使用output = binascii.hexlify(data)时则报错了,对此函数munuals的说法是:

Return the hexadecimal representation of the binary data. Every byte of data is converted into the corresponding 2-digit hex representation. The resulting string is therefore twice as long as the length of data

因此对传入的参数必须申明是byte of data,刚开始没有想到,不知怎么处理,后来想到b'string data'类似于r'string data'(原始字符串,在使用windows路径时,r'..\path'可以不需要对反斜线转义),于是有了:

data = b'data'
output = binascii.hexlify(data)

于是问题便愉快的解决了,同样可以进行转换

另外在2.7中,binascii模块可以使用,output = binascii.hexlify(data)直接就可以投入使用,不必data = b'data'处理,这也是不同版本之间显著的区别,2.7的

一些功能用起来更上手,但是3.0版这么做也是出于某种需要

再给几个进制转换的例子:

int('bf',16) 将16进制数bf转为10进制数,把16改为8或2就对于不同的进制
 hex(num),把hex换成bin或oct就对应于二进制数和八进制了

看到有一段不错的不错进制转换的代码:

import os,sys

# global definition
# base = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F]
base = [str(x) for x in range(10)] + [ chr(x) for x in range(ord('A'),ord('A')+6)] # bin2dec
# 二进制 to 十进制: int(str,n=10)
def bin2dec(string_num):
return str(int(string_num, 2)) # hex2dec
# 十六进制 to 十进制
def hex2dec(string_num):
return str(int(string_num.upper(), 16)) # dec2bin
# 十进制 to 二进制: bin()
def dec2bin(string_num):
num = int(string_num)
mid = []
while True:
if num == 0: break
num,rem = divmod(num, 2)
mid.append(base[rem]) return ''.join([str(x) for x in mid[::-1]])

完整代码见http://www.cnblogs.com/zhangpengshou/archive/2012/03/12/2392068.html

最后再给出Ascii码和整数转换的函数:

chr()函数以一个Ascii码作为参数,返回对应的整数

ord()函数则刚好与chr()相反,返回对应Ascii码,如果参数超过Ascii码表示范围则返回对应的unicode值

    

  

Python十六进制与字符串的转换的更多相关文章

  1. Python中十六进制和字符串的转换(转载)

    调用Python内置int()函数把该字串转为数字.以下为在Python解释器编程环境下的操作示范: 把十六进制的字串转为十进制数字:Python代码>>> print int('f ...

  2. JAVA 十六进制与字符串的转换

    public static String toHexString(int i)以十六进制的无符号整数形式返回一个整数参数的字符串表示形式.如果参数为负,那么无符号整数值为参数加上 232:否则等于该参 ...

  3. python 爬虫数据处理字符串时间转换格式方法

    startDate = "2018-10-01"endDate = "2018-10-31" ###字符转化为日期startTime = datetime.da ...

  4. python图片和字符串的转换

    有个业务,需要将图片压缩转化为64位编码上传到服务端. import json,requests,base64 #网上下载图片素材 r = requests.get("https://tim ...

  5. Python 字节与字符串的转换

    html = urlopen("http://www.cnblogs.com/ryanzheng/p/9665224.html") bsObj = BeautifulSoup(ht ...

  6. python数组和字符串互相转换

    字符串转数组 str = '1,2,3' arr = str.split(',') 数组转字符串 arr = ['a','b'] str = ','.join(arr) arr = [1,2,3] s ...

  7. Python 16进制与字符串的转换

    电脑上装了Python2.7和3.3两个版本,平时运行程序包括在Eclipse里面调试都会使用2.7,但是由于某些原因在cmd命令行中输入python得到的解释器则是3.3, 一直没对此做处理,因为这 ...

  8. Python字符串格式转换

    转换类型 转换类型 说明 d, i 带符号十进制 b 无符号二进制 o 无符号八进制 u 无符号十进制 x 无符号十六进制(小写) X 无符号十六进制(大写) e 科学计数法表示的浮点数(小写) E ...

  9. Python技巧——list与字符串互相转换

    Python技巧——list与字符串互相转换   在Python的编程中,经常会涉及到字符串与list之间的转换问题,下面就将两者之间的转换做一个梳理. 1.字符串转换成list 命令:list() ...

随机推荐

  1. [emacs] Drawing uml under emacs org-mode using plantUML - 类图

    [emacs] Drawing uml under emacs org-mode using plantUML - 类图 // */ // ]]>   [emacs] Drawing uml u ...

  2. android中出现Error retrieving parent for item: No resource found that matches the Theme.AppCompat.Light

    styles.xml中<style name="AppBaseTheme" parent="Theme.AppCompat.Light">提示如下错 ...

  3. 怎么让composer加速

    composer install 为什么这么慢? 下面是一个composer install(在没有composer cache的情况下)做的所有事情: [vagrant@localhost comp ...

  4. mysql的collation

    mysql的collation大致的意思就是字符序.首先字符本来是不分大小的,那么对字符的>, = , < 操作就需要有个字符序的规则.collation做的就是这个事情,你可以对表进行字 ...

  5. 《ASP.NET SignalR系列》第一课 认识SignalR

    从现在开始相关文章请到: http://lko2o.com/moon 一.概述 ASP.NET signalr对ASP.NET开发者来说是一个新的程序库,它能让我们更加容易便捷地开发实时通信功能; s ...

  6. MVC之前的那点事儿系列(6):动态注册HttpModule

    文章内容 通过前面的章节,我们知道HttpApplication在初始化的时候会初始化所有配置文件里注册的HttpModules,那么有一个疑问,能否初始化之前动态加载HttpModule,而不是只从 ...

  7. PHP--冒泡、选择、插入排序法

    使用php来实现常用三种排序方法: 冒泡.选择.插入中,最优的是插入排序,我就把插入排序的流程画下来了: 插入排序法的流程图: 插入排序的代码: function InsertSort(&$a ...

  8. 问得最多的十个JavaScript前端面试问题

    我知道有很多人不同意这种类型的面试.其实不管你喜不喜欢,你都得接受.尤其当你是自学的,而且要申请第一份工作时.   我估计很多有人其它方法来证明他自己,像Github/ 项目地址可能是非常理想的证明方 ...

  9. Entity Framework 实体框架的形成之旅--基类接口的统一和异步操作的实现(3)

    在本系列的第一篇随笔<Entity Framework 实体框架的形成之旅--基于泛型的仓储模式的实体框架(1)>中介绍了Entity Framework 实体框架的一些基础知识,以及构建 ...

  10. 在WCF数据访问中使用缓存提高Winform字段中文显示速度

    在我们开发基于WCF访问方式的Winform程序的时候,一般情况下需要对界面显示的字段进行中文显示的解析.如果是硬编码进行中文显示,那么除了不方便调整及代码臃肿外,性能上没有什么问题,但是不建议这样处 ...