电脑上装了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: "

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 "", line 1, in

'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就对应于二进制数和八进制了

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

importos,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)

defbin2dec(string_num):return str(int(string_num, 2))#hex2dec#十六进制 to 十进制

defhex2dec(string_num):return str(int(string_num.upper(), 16))#dec2bin#十进制 to 二进制: bin()

defdec2bin(string_num):

num=int(string_num)

mid=[]whileTrue:if num == 0: breaknum,rem= divmod(num, 2)

mid.append(base[rem])return ''.join([str(x) for x in mid[::-1]])

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

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

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

python字符串转16进制_Python十六进制与字符串的转换相关推荐

  1. python中文转16进制_Python 16进制与中文相互转换的实现方法

    Python中编码问题:u'\xe6\x97\xa0\xe5\x90\x8d' 类型的转为utf-8的解决办法 相信小伙伴们遇到过类似这样的问题,python2中各种头疼的转码,类似u'\xe6\x9 ...

  2. python如何输出16进制_python 以16进制打印输出的方法

    python 以16进制打印输出的方法 打印整数16进制 num=10 print('%#x'%num) 打印字符串中的16进制 arr='12342535' for i in arr: print( ...

  3. 十六进制转字符串,字符串转16进制

    字符串转16进制,十六进制转字符串 #include <string.h> #include <stdio.h> #include <stdlib.h> #incl ...

  4. Labview字符串转16进制

    在数据通信的时候经常会用到16进制来相互传输数据,下面是我在学习用Labview,探索到的用Labview实现字符串转换成16进制的方法之一. 用到的模块都很简单,有点基础的就能看懂 字符串转16进制 ...

  5. c# 字符串与16进制ASCII码相到转换

    1.普通字符串转16进制ASCII码 //普通字符串转16进制ASCII码 public static string toASCII(string code){char[] cs = code.ToC ...

  6. python 16进制补零_Python输出16进制不带0x补零,整数转16进制,字符串转16进制

    python输出16进制不带0x补零,整数转16进制,字符串转16进制 在开发中,我们偶尔会遇到需要将数据通过控制台打印出来,以检查数据传输的准确性.例如调试服务端刚接到的二进制数据(里面包含很多非可 ...

  7. python hex 补零_Python输出16进制不带0x补零,整数转16进制,字符串转16进制

    Python输出16进制不带0x补零,整数转16进制,字符串转16进制 在开发中,我们偶尔会遇到需要将数据通过控制台打印出来,以检查数据传输的准确性.例如调试服务端刚接到的二进制数据(里面包含很多非可 ...

  8. python socket发送16进制数据_Python UDP Socket 16进制数据发送

    注:此篇文章首次发表于我的一篇CSDN博客里边,现转载于此. 今天琢磨了一下Python UDP Socket 16进制数据发送. 原以为UDP发送和接受的都是字符,怎么能够发送16进制?但细想,其实 ...

  9. Python输出16进制不带0x补零,整数转16进制,字符串转16进制

    Python输出16进制不带0x补零,整数转16进制,字符串转16进制   在开发中,我们偶尔会遇到需要将数据通过控制台打印出来,以检查数据传输的准确性.例如调试服务端刚接到的二进制数据(里面包含很多 ...

最新文章

  1. java中execution的作用_一文初步了解Java虚拟机
  2. Redis 在真实世界的 5 个用法
  3. Resource interpreted as Stylesheet but transferred with MIME type text/html: “**.jsp“,主要因为拦截器将所有资源拦截
  4. [转]两个经典的windbg调试案例,值得学习。
  5. jni中native通过adb输出
  6. artifacts屏蔽java文件输出_Java 是什么?
  7. Coding the Matrix作业Python Lab及提交方法
  8. Flask部署工具的安装与使用
  9. [原]linux 修改 hostname 立即生效
  10. idea 主题插件_我在 IntelliJ IDEA 中必有得插件和配置
  11. 计算机硬件的基本结构和工作原理
  12. 求长方形和正方形的面积
  13. Android9.0 power键功能定义配置方法
  14. 电路交换、报文交换、分组交换、异步传输模式等通信交换技术的区别
  15. 洛谷P2678 [NOIP2015 提高组] 跳石头
  16. 仿哔哩哔哩视频app小程序模板源码
  17. 【Redis】练习题
  18. 创建自己的Docker映像(技术提示#57)
  19. polished css,CSS in JS
  20. 看门狗是个啥东西?/汪汪(通俗理解看门狗)

热门文章

  1. nodejs笔记2——使用绝对路径来获取上级目录文件
  2. 计算机演示文稿的使用步骤,计算机二级MSOFFICE演示文稿操作步骤.docx
  3. Ceph 的基础数据结构 [Pool, Image, Snapshot, Clone]
  4. 笔记:js:onfocus和onblur事件
  5. 聊聊数据仓库中维度表设计的二三事
  6. 英语口语143之每日十句口语
  7. YUV422显示视频格式解释
  8. Django 中CSRF中间件 'django.middleware.csrf.CsrfViewMiddleware',
  9. layer 使用教程
  10. 语音质量评价方法-【音频质量专题】