python中unicode, hex, bin之间的转换
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 等
format
format(0x12, '08b') >>> '00010010'
"{:08b}".format(0x12) >>> '00010010'
得到一个过长的字符串,无法对这个字符串进行异或操作,且无法对get到的str进行format操作
bin
bin(0x12) >>> '0b10010'
得到一个 带着0b标识的字符串
而且确认到,bin无法直接接收一个'\x01'
或'00010010'
这样的字符串
曲线救国,先转int再转bin,再异或
先转int
beforeDACL[34] >>> '\x1f'
ord(beforDACL[34]) >>> 31
再由int转为bin
bin_dacl = bin(dacl)[2:] # '11111'
这里的[2:]
是由bin转换后的长度,本来是8位,只截取后面的几位,因为这个dacl的有效位只5位。对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
转回最初的格式
\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之间的转换的更多相关文章
- Python中字符串/字典/json之间的转换
import json #定义一个字典d1,字典是无序的 d1 = { "a": None, "b": False, "c": True, ...
- python中各进制之间的转换
偶然翻看进制转换的内容.这里简单做一个记录吧. #十进制转换二进制 >>> bin() '0b1010' #十进制转换十六进制 >>> hex() '0xa' #二 ...
- python中的字符数字之间的转换函数
int(x [,base ]) 将x转换为一个整数 long(x [,base ]) 将x转换为一个长整数 float(x ) ...
- 【转】python中的字符数字之间的转换函数
int(x [,base ]) 将x转换为一个整数 long(x [,base ]) 将x转换为一个长整数 float(x ) ...
- python2 中 unicode 和 str 之间的转换及与python3 str 的区别
在python2中字符串分为unicode 和 str 类型 Str To Unicode 使用decode(), 解码 Unicode To Str 使用encode(), 编码 返回数据给前端时需 ...
- python中 字符 字典 列表之间的转换
1 字典 转 字符 定义一个字典:dict = {'name': 'python', 'age': 7}字典转字符 可以使用str强制转换 如: str(dict) 此时dict的类型就是字符型了 2 ...
- 转:Python常见字符编码及其之间的转换
参考:Python常见字符编码 + Python常见字符编码间的转换 一.Python常见字符编码 字符编码的常用种类介绍 第一种:ASCII码 ASCII(American Standard Cod ...
- 举例说明Unicode 和UTF-8之间的转换
1)写这篇博客的原因 首先我要感谢这篇博客,卡了很久,看完下面这篇博客终于明白Unicode怎么转换成UTF-8了. https://blog.csdn.net/qq_32252957/article ...
- Unicode和UTF-8之间的转换
转自:http://www.cnblogs.com/xdotnet/archive/2007/11/23/unicode_and_utf8.html#undefined 最近在用VC++开发一个小工具 ...
随机推荐
- 图论之最小生成树之Kruskal算法
Kruskal算法,又称作为加边法,是配合并查集实现的. 图示: 如图,这是一个带权值无向图我们要求它的最小生成树. 首先,我们发现在1的所有边上,连到3的边的边权值最小,所以加上这条边. 然后在3上 ...
- noi.ac 邀请赛1 By cellur925
A. array 考场:上来就想暴力,首先第一个子任务肯定没问题,怎么搞都行.然后第二个子任务用个数组记下新修的值就行了.第三个子任务用一下等差数列求和公式帮助求解,每次都重新算(因为每次改变全部元素 ...
- oracle 表空间及查看所有用户的表空间
用户有默认表空间,但是只能指定一个,但是你有其它表空间的限额的话,可以将表建到其它表空间中. 语法 create table xxx(xxxx xx) tablespace xxxxx 1.查看当前用 ...
- 【poj2528】Mayor's posters
Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 64939 Accepted: 18770 ...
- Codeforces Round #395 (Div. 2) A
Description Comrade Dujikov is busy choosing artists for Timofey's birthday and is recieving calls f ...
- Unity中所有特殊的文件夹
1. 隐藏文件夹以.开头的文件夹会被Unity忽略.在这种文件夹中的资源不会被导入,脚本不会被编译.也不会出现在Project视图中.2. Standard Assets在这个文件夹中的脚本最先被编译 ...
- AJPFX总结线程创建的两种方法
创建线程的第一种方式:继承Thread ,由子类复写run方法.步骤:1,定义类继承Thread类:2,目的是复写run方法,将要让线程运行的代码都存储到run方法中:3,通过创建Thread类的子类 ...
- 动态栅格(DEM)图层实现服务端渲染
PS:此处动态图层指,图层文件都放在经过注册的文件目录里,可以通过文件名动态加载图层 动态加载的矢量图层,可以实现客户端和服务端的定制渲染,但栅格一般是不能再渲染的,以下介绍可行的方法 建立一个很简单 ...
- 一个Java编写的小玩意儿--脚本语言解释器(一)
今天开始想写一个脚本语言编译器.在这个领域,我还是知道的太少了,写的这个过程肯定是艰辛的,因为之前从来没有接触过这类的东西.写在自己的博客里,算是记录自己的学习历程吧.相信将来自己有幸再回过头来看到自 ...
- Android单独继承View类来实现自定义控件
一个单独继承view类来实现自定义控件,在该方法中,需要重写ondraw方法来绘制自己所需要的控件,下面也以一个简单的例子来说明如何实现自定义控件.该方法可以实现所需要的所有的自定义控件. 属性文件中 ...