【发布时间】:2019-05-23 02:46:01
【问题描述】:
我需要在 swift 中将 BigInt 转换为字节数组,就像在 java 中一样。 attaswift/BigInt 只能转换 UInt 而无需签名。我可以在 swift 上做什么?如何将签名转换或添加到字节数组?左上角字节中的 0 并不总是有效。
Java 代码
java.math.BigInteger.toByteArray()
半工作的 Swift 代码
BigUInt.serialize()
我的问题比这个问题更复杂(Swift BigInt to [UInt8])。我需要考虑字节数组中的符号。
【问题讨论】:
-
如果当前最高字节 >= 0x80 且原始 BigInt 为正,则仅添加 0 最高字节。如果当前最高字节
-
@O.Shulzhenko:这是另一个问题。但是没问题。 0xFF 是您将其解释为的内容。它可以解释为 -1 或 255。在这种情况下,将其插入顶部以使所有字节的值加在一起的二进制补码为负(因为前一个顶部字节 = 0x80:这也将被解释为负数(设置顶部位),因此如果原始 BigInteger 为正数,则必须在顶部添加一个 0,以使整个值为正数。但是永远不要忘记签名或未签名只是解释的问题。阅读关于二进制补码的信息。
-
其他字节只是 BigInteger 位的载体。如果编码正确,那么您应该得到与其他语言相同的值,通常是two's complement(即使内部表示可能不同)。我知道的大多数 BigInteger 实现 pretend 是二进制补码,并且将接受或生成二进制补码格式的字节数组,尽管并不总是具有相同的字节序(Java:总是大字节序,.NET 通常是小字节序)。在内部,他们经常使用符号幅度
标签: java swift biginteger bigint