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++开发一个小工具 ...
随机推荐
-
在Ubuntu13.04中配置Jexus+Mono3.2运行Asp.Net Mvc 4站点 (一)
这篇文章打算分两部分来写,第一部分介绍在Ubuntu中安装和配置.Net Framework4.5环境,第二部分介绍如何部署Asp.Net Mvc 4站点并确保Mvc4的几个重要特性都能正常工作. 一 ...
-
php日期,时间相关知识整理
unix 时间戳:从1970年1月1日0点开始到当前时间所经过的秒数. 1.将日期转换为UNIX时间戳 mktime():可以自动校正越界的输入 原型 : mktime(hour,minute,sec ...
-
Android开发之Handler
我们都知道应用程序开启后,安卓会开启一个主线程(UI线程),主线程管理UI控件,进行事件分发.那为什么会出现Handler呢? 例如你要是点击一个 Button ,Android会分发事件到Butto ...
-
diff命令
描述 在最简单的情况是, diff 比较两个文件的内容 (源文件 和 目标文件). 文件名可以是 - 由标准输入设备读入的文本. 作为特别的情况是, diff - - 比较一份标准输入的它自己的拷贝如 ...
-
ASP.NET Zero--开发指南
ASP.NET Zero--开发指南(Lyhcee 译) 01. 前期介绍 02. 前期要求 03. 解决方案结构(层) 04. 前端应用程序 05. 后端应用程序 06.WEB.HOST应用程序 0 ...
-
sqlserver存储过程分页记录
USE [HK_ERP]GO/****** Object: StoredProcedure [dbo].[GetPageBillsByShopID] Script Date: 2018/10/30 1 ...
-
SQL Server CTE 递归查询全解
在TSQL脚本中,也能实现递归查询,SQL Server提供CTE(Common Table Expression),只需要编写少量的代码,就能实现递归查询,本文详细介绍CTE递归调用的特性和使用示例 ...
-
lower_bound和upper_bound的实现和基本用法
最近一直在学dp,但是感觉进度明显慢了很多,希望自己可以加一把劲,不要总是拖延了... 在LIS的优化中我遇到了二分查找的问题,之前也知道lower_bound和upper_bound两个函数,但是没 ...
-
乘风破浪:LeetCode真题_024_Swap Nodes in Pairs
乘风破浪:LeetCode真题_024_Swap Nodes in Pairs 一.前言 这次还是链表的操作,不过我们需要交换链表奇数和偶数位置上的节点,因此要怎么做呢? 二.Swap Nodes i ...
-
Django Book学习笔记(下)
Django的Session框架 对于Django加密,大致使用这样的格式: hashtype$salt$hash 原因? 一次哈希是一次单向的加密过程,你能容易地计算出一个给定值的哈希码,但是几乎不 ...