Go';做python的方法';有符号整数的s int.from_字节

Go';做python的方法';有符号整数的s int.from_字节,python,go,Python,Go,我想将大端有符号整数的字节转换为big.Int。在python中,我会这样做: >>int.from_字节(b'\xfc\x00',byteorder='big',signed=False) 64512 >>>int.from_bytes(b'\xfc\x00',byteorder='big',signed=True)#不幸的是,我没有在std库中找到一种内置的方法来完成它。最后,我按照@Volker的建议手工进行了转换: func bigIntFromBytes(x*big.Int,buf[]

我想将大端有符号整数的字节转换为
big.Int
。在python中,我会这样做:

>>int.from_字节(b'\xfc\x00',byteorder='big',signed=False)
64512

>>>int.from_bytes(b'\xfc\x00',byteorder='big',signed=True)#不幸的是,我没有在std库中找到一种内置的方法来完成它。最后,我按照@Volker的建议手工进行了转换:

func bigIntFromBytes(x*big.Int,buf[]字节)*big.Int{
如果len(buf)==0{
返回x
}
if(0x80&buf[0])==0{//正数
返回x.SetBytes(buf)
}
对于i:=范围buf{
buf[i]=^buf[i]
}
返回x.SetBytes(buf).Add(x,big.NewInt(1)).Neg(x)
}

不幸的是,我没有在std库中找到一种内置的方法。最后,我按照@Volker的建议手工进行了转换:

func bigIntFromBytes(x*big.Int,buf[]字节)*big.Int{
如果len(buf)==0{
返回x
}
if(0x80&buf[0])==0{//正数
返回x.SetBytes(buf)
}
对于i:=范围buf{
buf[i]=^buf[i]
}
返回x.SetBytes(buf).Add(x,big.NewInt(1)).Neg(x)
}

这是否回答了您的问题?将blob转换为
int
(使用一些bytefiddling)。从那个整数中设置大整数。@jakub,它没有。您发布的答案只适用于无符号整数。@Volker,我希望找到一些需要最少ByteFlidding的东西。此外,我无法转换为
int
,因为可能有一些数字可能大于最大int64。好的,那么int.SetBytes是一种方法,但由于这将blob解释为无符号,您必须手动进行符号转换:查看blob中的符号位。如果设置:清除并补充。如果未设置:什么也不做。然后是Int.SetBytes。如果设置了符号位:加1,乘以-1。(未经测试)。这是否回答了您的问题?将blob转换为
int
(使用一些bytefiddling)。从那个整数中设置大整数。@jakub,它没有。您发布的答案只适用于无符号整数。@Volker,我希望找到一些需要最少ByteFlidding的东西。此外,我无法转换为
int
,因为可能有一些数字可能大于最大int64。好的,那么int.SetBytes是一种方法,但由于这将blob解释为无符号,您必须手动进行符号转换:查看blob中的符号位。如果设置:清除并补充。如果未设置:什么也不做。然后是Int.SetBytes。如果设置了符号位:加1,乘以-1。(未经测试)。