python bit 操作
# -*- coding: utf-8 -*-
import os
import sys
import time
import inspect
import socket
import traceback
baseHexWrite="0xFFF11111" # 写基地址
baseHexRead="0xFFF11111" # 读基地址
baseBitWidth=4
def int_to_bin(valNum:int)->str:
binary_string = bin(valNum)[2:]
return binary_string # hex_value[2:] # 去除hex()返回结果中的前缀0x
def binary_to_hex(binary):
decimal = int(binary, 2)
hex_value = hex(decimal)
return hex_value # hex_value[2:] # 去除hex()返回结果中的前缀0x
def set_bit_val( index, val:int=0,byte:int=0x000000000)->int:
res=0
if index > 31:
print("Index out of range")
return None
if val:#设置为0
# byte = 0x00000000 # 默认为全0
# 构造一个只有第k位为1,其他位为0的数字
mask = 1 << index #
# 将n的第k位设为1
res = byte | mask #
else:#设置为1
if byte==0x000000000:
byte = 0xFFFFFFFF #默认为全1
# 创建一个掩码,将要设置为0的位设为0,其余位设为1
mask = ~(1 << index)
# 将掩码与原数字进行按位与操作
res = (byte & mask)
return res
def get_bit(n,index,len:int =1):
binary_string=""
if len==1:
binary_string= str( (n >> index) & 1)
else:
for i in range(len):
binary_string= str((n >> index+i) & 1)+binary_string
print(binary_string)
_number = int(binary_string, 2)
return _number
def Hex2int(baseHexRead :str)->int:
try:
# baseHexRead = "1a3f" # 假设这是你要转换的十六进制字符串
convertedValue = int(baseHexRead, 16)
# print(f"转换后的整数为: {convertedValue}")
return convertedValue
except ValueError:
print("ConverHex error ")
return None
#基地址偏移
def ConverAddress(MoveLen:int,IsRead:bool=False)-> str:
if IsRead:
# baseint=
return hex( (int(baseHexRead,16)+MoveLen*baseBitWidth))
else:
# baseint=
return hex( (int(baseHexWrite,16)+MoveLen*baseBitWidth))
def ATERead(basehexR_a)->int :
# res= ate.target.readMemory(basehexR_a, "0x4")
res=int(res,16)
def takeBitVal ( valNum:int, bitstart:int, bitLen:int=1):
binary_string = bin(valNum)[2:] # type: ignore
print(binary_string) # 输出: 1010
if((bitstart+bitLen) > len(binary_string)):
print("bitLen 超出范围")
return None
take_val= binary_string[bitstart:(bitstart+bitLen)]
print(take_val)
return take_val
print(baseHexWrite)
res=Hex2int(baseHexWrite)
print(res)
print(ConverAddress(1))
print(ConverAddress(2))
print(ConverAddress(3))
print(ConverAddress(4))
# res["val"]="0"
print(int("0x0",16))
# int(res,16))
takeBitVal(res, 0,15)
print(hex(set_bit_val(5)))
print(hex(set_bit_val(31)))
print(hex(set_bit_val(5,1)))
print(hex(set_bit_val(31,1)))
print(hex(set_bit_val(31,1,0xFFFFFFDF)))
print( int_to_bin((set_bit_val(5,1,0xFFFFFFDF))))
# val= set_bit_val((0),31,1)
# print(f"{val}")
res=Hex2int("0xFFFFFFDF")
print(get_bit(res,0))
print(get_bit(res,0,5))