我需要一些方法将 BigInt 转换为字节数组,例如 java in swift
I need some method to convert BigInt to Bytes array like in java in swift
我需要像 swift 中的 java 那样将 BigInt 转换为字节数组。
attaswift/BigInt 只能转换 UInt 而无需签名。我可以在 swift 上做什么?如何转换或添加签名到字节数组?左上字节中的 0 并不总是有效。
Java代码
java.math.BigInteger.toByteArray()
半成品Swift代码
BigUInt.serialize()
我的问题比这个问题更复杂()。我需要考虑字节数组中的符号。
我认为我制作了正确的扩展代码。
如有错误请留言
extension BigInt {
public func serialize() -> Data {
var array = Array(BigUInt.init(self.magnitude).serialize())
if array.count > 0 {
if self.sign == BigInt.Sign.plus {
if array[0] >= 128 {
array.insert(0, at: 0)
}
} else if self.sign == BigInt.Sign.minus {
if array[0] <= 127 {
array.insert(255, at: 0)
}
}
}
return Data.init(bytes: array)
}
public init(_ data: Data) {
var dataArray = Array(data)
var sign: BigInt.Sign = BigInt.Sign.plus
if dataArray.count > 0 {
if dataArray[0] >= 128 {
sign = BigInt.Sign.minus
if dataArray.count > 1 {
if dataArray[0] == 255, dataArray.count > 1 {
dataArray.remove(at: 0)
} else {
dataArray[0] = UInt8(256 - Int(dataArray[0]))
}
}
}
}
let magnitude = BigUInt.init(Data.init(bytes: dataArray))
self .init(sign: sign, magnitude: magnitude)
}
}
我需要像 swift 中的 java 那样将 BigInt 转换为字节数组。 attaswift/BigInt 只能转换 UInt 而无需签名。我可以在 swift 上做什么?如何转换或添加签名到字节数组?左上字节中的 0 并不总是有效。
Java代码
java.math.BigInteger.toByteArray()
半成品Swift代码
BigUInt.serialize()
我的问题比这个问题更复杂(
我认为我制作了正确的扩展代码。
如有错误请留言
extension BigInt {
public func serialize() -> Data {
var array = Array(BigUInt.init(self.magnitude).serialize())
if array.count > 0 {
if self.sign == BigInt.Sign.plus {
if array[0] >= 128 {
array.insert(0, at: 0)
}
} else if self.sign == BigInt.Sign.minus {
if array[0] <= 127 {
array.insert(255, at: 0)
}
}
}
return Data.init(bytes: array)
}
public init(_ data: Data) {
var dataArray = Array(data)
var sign: BigInt.Sign = BigInt.Sign.plus
if dataArray.count > 0 {
if dataArray[0] >= 128 {
sign = BigInt.Sign.minus
if dataArray.count > 1 {
if dataArray[0] == 255, dataArray.count > 1 {
dataArray.remove(at: 0)
} else {
dataArray[0] = UInt8(256 - Int(dataArray[0]))
}
}
}
}
let magnitude = BigUInt.init(Data.init(bytes: dataArray))
self .init(sign: sign, magnitude: magnitude)
}
}