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. 【POJ - 2664】Prerequisites? (排序+查找)

    Prerequisites? 原文是English,这里直接就写中文吧 题意简述 k:已经选择的科目数:m:选择的科目类别:c:能够选择的科目数.r:要求最少选择的科目数量 在输入的k和m以下的一行是 ...

  2. 黑客攻防技术宝典web实战篇:攻击用户·其他技巧习题

    猫宁!!! 参考链接:http://www.ituring.com.cn/book/885 随书答案. 1. 已知一项应用程序功能将一个查询字符串参数的内容插入到某个 HTTP 重定向的 Locati ...

  3. VS Code 自用插件备份

    自用插件备份 Auto Close Tag 自动闭合标签 Atuo Rename Tag 更改前面标签的时候, 自动更改后面的闭合标签 Guides 对齐线 open-in-browser 在浏览器中 ...

  4. hibernate Day1

    1 Web内容回顾(1) JavaEE三层架构web层(struts2框架)service层(spring框架)dao层(hibernate框架):负责对数据库进行CRUD操作(2) MVC模式(这是 ...

  5. [在读]webkit技术内幕

    看了一点点,还不适合目前的我看,搁置.

  6. Hadoop工作流概念学习系列总述(一)

    不多说,这里,直接上干货!从这篇博客起,逐步分享如下: 1.工作流 2.Hadoop工作流(内置) 3.第三方框架--Azkaban(推荐外安装)

  7. AJPFX总结heap和stack有什么区别?

    栈是后进先出的线性表结构,存取速度比堆快.创建对象的时候new一个对象,引用存在栈上具体的内容存在堆上. 栈与堆都是Java用来在RAM中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不 ...

  8. 关于HashMap中hash()函数的思考

    关于HashMap中hash()函数的思考 JDK7中hash函数的实现   static int hash(int h) { h ^= (h >>> 20) ^ (h >&g ...

  9. canvas基础绘制-arc

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. asp.net 中文部分显示问号

    很神奇的事情,今天部署了一个网站,页面从数据读取新闻后,有些新闻标题全部显示问题号,有几个新闻能正确显示汉字,然后查看新闻页面又能正常显示汉字. 解决办法: 在异常的页面上加上 < %@ COD ...