1.先将int转为hex字符串,去掉'0x',然后对位数判断,比如1 -- 0x01(而不是0x1), 22 -- 0x16;
站在用户的角度思考问题,与客户深入沟通,找到牡丹网站设计与牡丹网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都做网站、网站设计、企业官网、英文网站、手机端网站、网站推广、国际域名空间、虚拟主机、企业邮箱。业务覆盖牡丹地区。
2.直接将字符串转为bytearray,比如'0x123456' -- 0x12\0x34\0x56(忽略转义表示,此处只是讨论使用方法);
3.直接将bytearray转为bytes
def hexPos(num):
val = hex(int(num))[2:]
if len(val) % 2 != 0:
val = '0' + val
y = bytearray.fromhex(val)
if len(y) != 4:
x = bytearray(4 - len(y))
return bytes(x + y)
leetcode上有这么一道题:【136. Single Number】
这个题是给出一个非空列表,里面的元素只有一个只出现了一次,其余都出现了两次,找出这个只出现了一次的元素。
这个题目很简单,写了一下直接提交:
翻了一下讨论,发现了一个很简单快速的方法:
查了一下异或运算,发现找到唯一值是异或运算在python中的主要用途之一。其原理是这样的:
输出:70
当a,b都转换为二进制:
输出:0b1010与0b1001100
异或运算是将两个数相同位置(长度不一时要对齐)的数值,不同为1时,结果为1,否则为0 。比如:(0101) ^ (0011) = 0110。
这里a ^ b = 0b1000110,即70。
当两个数相同时,异或运算结果为0.
from random import seed,randint
str_in=input('请输入一个字符串:')
you_seed=input('请输入密码:')
you_seed=int(you_seed)
#lock
def my_lock(lock_str,lock_seed):
seed(lock_seed)
li_out=[]
for i in lock_str:
li_out.append(chr(ord(i)^randint(0,65535)))
return ''.join(li_out)
my_lock_str=my_lock(str_in,you_seed)
print('原字符串:',str_in)
print('加密字符串:',my_lock_str)
print('还原后字符串:',my_lock(my_lock_str,you_seed))
input()
#python 3.4