我正在尝试将 a 拆分big.Int为多个int64s,以便每个都是较大数字的一部分,标准偏移量为 18 位。例如,给定以下输入值1234512351234088800000999,我希望得到以下输出:[351234088800000999, 1234512]。对于负数,我希望所有部分都是负数(即-1234512351234088800000999produces [-351234088800000999, -1234512])。
我已经知道我可以这样做以获得我想要的结果:
func Split(input *big.Int) []int64 {
const width = 18
asStr := in.Coefficient().Text(10)
strLen := len(asStr)
offset := 0
if in.IsNegative() {
offset = 1
}
length := int(math.Ceil(float64(strLen-offset) / width))
ints := make([]int64, length)
for i := 1; i <= length; i++ {
start := strLen - (i * width)
end := start + width
if start < 0 || (start == 1 && asStr[0] == '-') {
start = 0
}
ints[i-1], _ = strconv.ParseInt(asStr[start:end], 10, 64)
if offset == 1 && ints[i-1] > 0 {
ints[i-1] = 0 - ints[i-1]
}
}
return ints
}
但是,我不喜欢使用字符串解析的想法,也不喜欢使用strconv. 有什么方法可以直接使用吗big.Int?
沧海一幻觉
相关分类