两个16进制数相乘python

方法一

#-*-coding:gb2312-*-

def hex_to_int16(hex_data):
    return int(hex_data, 16)


if __name__ == '__main__':
    x = "ABCD98"
    y = "ABCD98"
    z = hex(hex_to_int16(x) * hex_to_int16(x))
    print(z)

方法二

#-*-coding:gb2312-*-

import numpy as np

hex_index = {
    '0': 0, '1': 1, '2': 2, '3': 3,
    '4': 4, '5': 5, '6': 6, '7': 7,
    '8': 8, '9': 9, 'A': 10, 'B': 11,
    'C': 12, 'D': 13, 'E': 14, 'F': 15
}

#求余数与商
def mul(m_x, m_y):
    x = hex_index[m_x]
    y = hex_index[m_y]
    z = x * y
    return z // 16, z % 16


#进位函数
def carry(trans_array):
    res_array = trans_array.copy()
    for m in range(1, len(res_array)):
        res_array[m] = trans_array[m - 1] // 16 + res_array[m] % 16
    return res_array

if __name__ == "__main__":
    x = "ABCD98"
    y = "ABCD98"

    x = x[::-1]
    y = y[::-1]

    lx = len(x)
    ly = len(y)

    # 初始化中转数组(列表)
    rs = np.zeros((lx + ly), int)
    for i in range(lx):
        for j in range(ly):
            # 逐位相乘
            qt, rm = mul(x[i], y[j])
            # 按位相加
            rs[i + j] = rs[i + j] + rm
            rs[i + j + 1] = rs[i + j + 1] + qt

    no_to_hex_1 = carry(rs)
    no_to_hex_2 = carry(no_to_hex_1)

    dst = ''
    for iterm in no_to_hex_2:
        dst = dst + list(hex_index.keys())[list(hex_index.values()).index(iterm)]
    print(dst[::-1])
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值