Hex to decimal value out of range reproduce by Golang

tmd的,不知道哪个蠢货,16进制转码10进制的结果溢出了还照样用,原则上不建议这样,但是历史原因也就一直用了下来;

连window上的计算机也是这样,估计也不会修改把bug当feature了.
使用golang还不能容易复现这个问题,因为转换溢出会有提示,还好依稀记得大学专业课上老师提到过的 整型与非整型转换的原理: 取反码, +1…
以下是实现

golang https://go.dev/play/p/vQOXCvXorBn

func Hex2Dec(hex string) int64 {
        decimal, err := strconv.ParseUint(hex, 16, 64)

        if err != nil {
                fmt.Println(err)
                return 0
        }

        fmt.Printf("ret^1*: %v\n", decimal^0xFFFFFFFFFFFFFFFF+1)
        fmt.Printf("1-ret: %d\n", int64(1-(decimal^0xFFFFFFFFFFFFFFFF+2)))
        return int64(1 - (decimal ^ 0xFFFFFFFFFFFFFFFF + 2))
}

func Hex2DecStr(hex string) string {
        return fmt.Sprintf("%d", Hex2Dec(hex))
}

lua则直接调用就可以复现(c实现的缘故)

print(tonumber("8e62a857bb000827",16))

2022-06-21