java - 我需要一些方法将 BigInt 转换为 Bytes 数组,就像 java 中的 swift 一样

标签 java swift biginteger bigint

我需要将 BigInt 转换为字节数组,就像 java 中的 swift 一样。 attaswift/BigInt 只能转换 UInt,无需签名。我可以在 swift 上做什么?如何将签名转换或添加到字节数组?左上角字节中的 0 并不总是有效。

Java代码

java.math.BigInteger.toByteArray()

半成品 Swift 代码

BigUInt.serialize()

我的问题比这个问题( Swift BigInt to [UInt8] )更复杂。我需要考虑字节数组中的符号。

最佳答案

我认为我制作了正确的扩展代码。

如有错误,请留言。

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)
}

}

关于java - 我需要一些方法将 BigInt 转换为 Bytes 数组,就像 java 中的 swift 一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53904932/

相关文章:

Golang 溢出 int64

ios - 蒙版效果是旋转照片

swift - RxSwift/Moya - 如果通过函数返回序列将不会启动

algorithm - 二进制到十进制(大数)

iOS 大整数 NSNumberFormatter 不工作

ios - 找不到 Objective-C 桥接头部分

javascript - 我无法使用 Java 通过 selenium Web 驱动程序从 Amazon.ca 页面打开 "All"下拉菜单

java - 获取数组列表中的最后一个元素

java - 从 TTF 文件加载字体适用于 Mac,但不适用于 Linux

java - 一步步在JPanel上绘图