ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

常用函数

2019-08-29 14:06:37  阅读:175  来源: 互联网

标签:常用 return 函数 power digit number tag qsw


常用的函数,目前有下面几个,待增加

round_qsw(number,power=0)
intToFloat_qsw(v:int,tag=4)
floatToInt_qsw(v:float,tag=4)
checkSum_qsw(arg:str,byteorder='little')
hexToAsc_qsw(arg:str)
ascToHex_qsw(v:str)

 

def round_qsw(number,power=0):
    """
    实现精确四舍五入,包含正、负小数多种场景
    :param number: 需要四舍五入的小数
    :param power: 四舍五入位数,支持0-∞
    :return: 返回四舍五入后的结果
    """
    digit = 10 ** power
    num2 = float(int(number * digit))
    # 处理正数,power不为0的情况
    if number>=0 and power !=0:
        tag = number * digit - num2 + 1 / (digit * 10)
        if tag>=0.5:
            return (num2+1)/digit
        else:
            return num2/digit
    # 处理正数,power为0取整的情况
    elif  number>=0 and power==0 :
        tag = number * digit - int(number)
        if tag >= 0.5:
            return (num2 + 1) / digit
        else:
            return num2 / digit
    # 处理负数,power为0取整的情况
    elif power==0 and number<0:
        tag = number * digit - int(number)
        if tag <= -0.5:
            return (num2 - 1) / digit
        else:
            return num2 / digit
    # 处理负数,power不为0的情况
    else:
        tag = number * digit - num2 - 1 / (digit * 10)
        if tag <= -0.5:
            return (num2-1)/digit
        else:
            return num2/digit


"""
    实现求校验和功能
    :par arg:字符串形式如‘00 01 02' 或 '000102' 必须是偶数位
"""
def checkSum_qsw(arg:str,byteorder='little'):
    arg=arg.replace(" ","")
    leng=len(arg)
    if(leng%2!=0):
        raise Exception("arg length is not even numbers!")
    checksum=0
    leng//=2
    for i in range(0,leng):
        t=arg[2*i:2*i+2]
        #print(t)
        x=int(t,16)
        checksum +=x
    checksum=checksum%256
    return hex(checksum)

"""
    实现转换浮点型内存格式
    :par float:字符串形式如‘00 01 02' 或 '000102' 必须是偶数位
    :par tat 几个字节 默认8个字节
    :return 16进制格式
"""
def floatToInt_qsw(v:float,tag=4)->int:
    import ctypes as c
    _floatTYPE = c.c_double if tag is 8 else c.c_float
    _intTYPE   = c.c_ulonglong if tag is 8 else c.c_int   
    if isinstance(v,float):
        v_float = _floatTYPE(v)
        ptrTYPE = c.POINTER(_intTYPE)
        ptr = c.cast(c.pointer(v_float),ptrTYPE)
        return hex(ptr[0])
    elif isinstance(v,int):
        v_int = _intTYPE(v)
        ptrTYPE = c.POINTER(_floatTYPE)
        ptr = c.cast(c.pointer(v_int),ptrTYPE)
        return hex(ptr[0])
    else: 
        return hex(v)

"""
    实现转换内存格式整型转浮点型 4个字节
    :par float:字符串形式如‘00 01 02' 或 '000102' 必须是偶数位
    :par tat 几个字节 默认4个字节
    :return 16进制格式
"""
def intToFloat_qsw(v:int,tag=4):
    import struct
    ba=v.to_bytes(tag, byteorder='big', signed=True)
    return struct.unpack("!f",ba)[0]
"""
    字符串转16进制
    quanshiwei =  '7175616e736869776569'
"""
def ascToHex_qsw(v:str):
    v=v.replace(" ","")
    r=''
    for tmp in v:
        t=hex(ord(tmp))
        r+=t[2:]
    return r

"""
    asc16进制转字符串
     '7175616e736869776569' = quanshiwei
"""
def hexToAsc_qsw(arg:str):
    arg=arg.replace(" ","")
    leng=len(arg)
    if(leng%2!=0):
        raise Exception("arg length is not even numbers!")
    checksum=''
    leng//=2
    for i in range(0,leng):
        t=arg[2*i:2*i+2]
        hexI=int(t,16)
        x=chr(hexI)
        checksum +=x
    return checksum

    

 

标签:常用,return,函数,power,digit,number,tag,qsw
来源: https://blog.csdn.net/u011849689/article/details/100136160

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有