python中unicode, hex, bin之间的转换


背景 在smb中有个feature change notify, 需要改动文件权限dacl,然后确认是否有收到notify。一直得不到这个dacl的formal是什么样子的,于是pdb中打印出原始dacl,是个类似于\x01\x00\x04\的字符串str,然鹅无法用str的方法来操作它。

需求 拿到特定的dacl位(wireshark中已确认为str的第34位11111,bin\x1f)并对它的最后一个bit位进行翻转。

get到的只能是个str类型的\x1f, 需转成bin,异或后再转回bytes


尝试 decode / encode

发现 这个奇怪的str 是unicode,尝试encode & decode

后来,确认到,这只是在unicode 和 bytes之间的转换,并无法转为bin。


尝试format , bin 等

  1. format

    format(0x12, '08b')  >>> '00010010'
    "{:08b}".format(0x12) >>> '00010010'

    得到一个过长的字符串,无法对这个字符串进行异或操作,且无法对get到的str进行format操作

  2. bin

    bin(0x12) >>> '0b10010'

    得到一个 带着0b标识的字符串

    而且确认到,bin无法直接接收一个'\x01''00010010'这样的字符串


曲线救国,先转int再转bin,再异或

  1. 先转int

    beforeDACL[34] >>> '\x1f'
    ord(beforDACL[34]) >>> 31
  2. 再由int转为bin

    bin_dacl = bin(dacl)[2:] # '11111'

    这里的[2:]是由bin转换后的长度,本来是8位,只截取后面的几位,因为这个dacl的有效位只5位。

  3. 对bin的最后一位异或

    list_dacl = list(bin_dacl) # list之后得到的是str
    list_dacl[-1] = str(int(list_dacl[-1]) ^ 1) # 将得到的str int后,异或,然后再转回str
    up_list_dacl = ''.join(list_dacl) # 拼接回原来的str
  4. 转回最初的格式\x01

    up_dacl = int(up_list_dacl, 2)  # 30
    # Convert back to the original format
    set_dacl = chr(up_dacl) # >>> '\x1e' 由int型转回初始类型

python中unicode, hex, bin之间的转换的更多相关文章

  1. Python中字符串/字典/json之间的转换

    import json #定义一个字典d1,字典是无序的 d1 = { "a": None, "b": False, "c": True, ...

  2. python中各进制之间的转换

    偶然翻看进制转换的内容.这里简单做一个记录吧. #十进制转换二进制 >>> bin() '0b1010' #十进制转换十六进制 >>> hex() '0xa' #二 ...

  3. python中的字符数字之间的转换函数

    int(x [,base ])         将x转换为一个整数     long(x [,base ])        将x转换为一个长整数     float(x )               ...

  4. 【转】python中的字符数字之间的转换函数

    int(x [,base ])         将x转换为一个整数     long(x [,base ])        将x转换为一个长整数     float(x )               ...

  5. python2 中 unicode 和 str 之间的转换及与python3 str 的区别

    在python2中字符串分为unicode 和 str 类型 Str To Unicode 使用decode(), 解码 Unicode To Str 使用encode(), 编码 返回数据给前端时需 ...

  6. python中 字符 字典 列表之间的转换

    1 字典 转 字符 定义一个字典:dict = {'name': 'python', 'age': 7}字典转字符 可以使用str强制转换 如: str(dict) 此时dict的类型就是字符型了 2 ...

  7. 转:Python常见字符编码及其之间的转换

    参考:Python常见字符编码 + Python常见字符编码间的转换 一.Python常见字符编码 字符编码的常用种类介绍 第一种:ASCII码 ASCII(American Standard Cod ...

  8. 举例说明Unicode 和UTF-8之间的转换

    1)写这篇博客的原因 首先我要感谢这篇博客,卡了很久,看完下面这篇博客终于明白Unicode怎么转换成UTF-8了. https://blog.csdn.net/qq_32252957/article ...

  9. Unicode和UTF-8之间的转换

    转自:http://www.cnblogs.com/xdotnet/archive/2007/11/23/unicode_and_utf8.html#undefined 最近在用VC++开发一个小工具 ...

随机推荐

  1. 第一篇 .NET高级技术之索引器

    基础知识补充 索引 器 没有名字 ,索引器的内部本质 (ILSpy的IL模式下看)类型 this[参数]{get;set;} 可以是只读或者只写(在get或者set前加上private) 字符串是只读 ...

  2. Eclipse新建Maven webapp项目错误的解决方法

    新建webapp项目时出现如下错误: 解决步骤如下: 1.  右键点击项目,选择Properties,点击Java Build Path,将默认的JRE移除,点击右侧add Library,选择JRE ...

  3. 【Ajax】接收后台数据在html页面显示

    Java代码 PrintWriter out=response.getWriter(); //向客户端发送字符数据 response.setContentType("text/text&qu ...

  4. UVA - 1349 D - Optimal Bus Route Design

    4. D - Optimal Bus Route Design 题意:给出n(n<=100)个点的带权有向图,找出若干个有向圈,每个点恰好属于一个有向圈.要求权和尽量小. 注意即使(u,v)和( ...

  5. 素数+map BestCoder Round #54 (div.2) 1002 The Factor

    题目传送门 题意:给出一个数列,问数列的乘积的一个满足条件的最小因子是什么,没有输出-1.条件是不是素数 分析:官方题解:对于每一个数字,它有用的部分其实只有它的所有质因子(包括相等的).求出所有数的 ...

  6. npm install error: MSBUILD : error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”

    When I tried to run angular 4 material2 demo on my windows server 2012, got a error message: node-pr ...

  7. Oracle JDK各版本下载地址记录

    Oracle JDK各版本下载地址: https://www.oracle.com/technetwork/java/javase/archive-139210.html

  8. LookupError: unknown encoding: idna 的处理方法

    写了一个脚本,想把它打包成exe文件,在python编译器中运行正常,但是打包成.exe文件运行报错 LookupError: unknown encoding: idna 找遍资料终于找到了解决方法 ...

  9. python中的sort和sorted

    共同点 都有三个参数, cmp用户自定义(指定函数),每个元素都会调用,效率没key高 key带一个参数的函数,用来为每个元素提取比较值 reverse=True    翻转 sort sort作用的 ...

  10. python_9(模块补充)

    第1章 re模块补充 1.1 贪婪匹配:回溯算法 1.2 .*?的用法 1.3 例:分组<name>取值 1.4 匹配整数删除小数 1.5 正则测试地址 第2章 重点模块 2.1 hash ...