python位操作

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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值