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++开发一个小工具 ...
随机推荐
- (DP)51NOD 1006 最长公共子序列&1092 回文字符串
1006 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为: abcicba abdkscab ab是两个串的子序列,abc也是,abca也是,其中abc ...
- elasticsearch接口开发(新)
此文在上一篇文章的基础上稍做了些许修改,主要在springboot整合ES后的包路径上,如下是新的目录结构 下面贴出代码 MyConfig.java package com.ylht.config; ...
- Linux修改文件的权限,拥有者,所属组
修改文件的权限,拥有者,所属组 1.设置文件的权限(chmod) ①方式一(建议使用这种方式) 命名:chomd 755 文件名 ②方式二 命名:chomd -R +x 文件名 2.设置文件的拥有者( ...
- c#学习系列之装箱拆箱
1. 装箱和拆箱是一个抽象的概念 2. 装箱是将值类型转换为引用类型 :拆箱是将引用类型转换为值类型 利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的 ...
- 自動獲取外網IP并發郵件
問題: 公司有一Web系統需開放給香港Office公司查詢資料,但最近動態域名需實名認證, 因系統較小型,非公開大範圍使用,所以再認證一域名也沒多大必要, 所以想定時生成一封能查詢外網IP的郵件發送給 ...
- Chrome插件制作
由于网上很难找到关于Chrome插件制作的中文教程,为了总结和方便更多的开发者,本文以最常见的显示效果为browser_action的二维码插件为例,进行相关阐述.前端童鞋开发的话应该很简单的,鄙人是 ...
- 系统设计摘录CAP
系统架构设计理论与原则 这里主要介绍几种常见的架构设计理论和原则,常见于大中型互联系统架构设计. (一).CAP理论 1.什么是CAP 所谓CAP,即一致性(Consistency).可用性(Avai ...
- Angular JS中变量定义的基本原则
在Angular JS开发中,经常需要定义一些变量,关于这些变量的定义方法及作用域应该注意以下几点: 1. 如果能用局部变量解决问题,尽量不要用全局变量. 2. 需要与界面双向绑定的变量采用$scop ...
- codevs 6116 区间素数
时间限制: 8 s 空间限制: 256000 KB 题目等级 : 白银 Silver 题解 题目描述 Description 小明喜欢研究素数,他想统计两个自然数之间的素数个数,现在 ...
- 解决python pip安装提示"not a supported wheel on this platform"
python下载.whl安装文件后使用pip安装有时候会提示报错"xxxxx not a supported wheel on this platform",应该是下载的库文件版本 ...