繁体   English   中英

如何在 Swift 中将二进制字符串转换为 Int 和隐蔽字节

[英]How can i convert binary string to Int and covert bytes in Swift

String value = "0001111000010000000100000100100110000000000000101010000101000000011000000010011110011001001101100011101011110110000100001101010111010011101010011001011001100001001000010000000010110001001001001011"
BigInteger bi = new BigInteger(value, 2);
// bi : 11794183182202048648710358761397377436458666044077659329099
byte[] bytes = bi.toByteArray();
// bytes : [B@647aa62

我有上面的 Java 代码。 尝试将其转换为 Swift。

我想知道如何进行上述转换才能在 Swift 中获得相同的结果。

我知道可以在 Swift 中将“BigInteger”用作“Int”。

Int(value,radix: 2)!

我找到了“Int(value,radix: 2)”。 在 Swift 中。但这没有用。(结果我没有得到。)

我应该用什么方法在Swift中得到与上面java相同的结果? 我需要什么额外的信息才能做到这一点?

首先,你的字符串是 196 位长,不适合Int (它是 64 位——当为 64 位机器编译时)。 这可能就是你得到 nil 的原因:它不适合。 如果您尝试使用较短的字符串,它应该可以工作。

那么这并不能解决你的问题。 所以第一件事就是,我们要找到一个可以存储你的 integer 的类型。swift 中最大的正数 integer 是UInt64 不适合。

所以我建议大家参考这个问题 它包含对几个库的引用,这些库允许使用 Swift 中的大整数。但在此之前,您应该想知道您打算用这个数字做什么? 计算? 仅显示? 还是仅存储(字节数少于整个字符串)? 近似值是否足够?

如果没有什么适合您的需要,那么您将需要编写自己的类型。

[B@647aa62

不是数据- 它是在字节数组上调用toString()的结果,它为您提供[B@[B是 JVMese 的“字节数组”)以及数组的系统标识哈希码,即,或多或少,它的 memory 地址(不是真的 - 重点是,它与其中的数据无关;再次运行该应用程序,它可能会有所不同;该字符串用于将其与其他字符串区分开来,仅此而已)。 如果那是你的困惑(“我如何从 swing 代码中得到 647aa62”),答案是:你无法得到它。

SO 上有很多关于“我如何打印字节数组”的问题,如果您有兴趣以十六进制或 base64 或十进制形式实际查看此数据,则可以使用其中任何一个。

我知道可以在 Swift 中将“BigInteger”用作“Int”。

这是不正确的。 根据swift 文档Int是 64 位或 32 位大,具体取决于平台。 包含位值的字符串中有 192 位。 因此,它不适合您问题的答案:“我如何获得Int(value, 2)!以产生与此 java 代码中相同的值”是:“这是不可能的”。

你当然不能得到[@B@647aa62 ,因为它与数据无关,实际上是一个随机数。 您也无法取出这 192 位,无论您希望它们以何种形式呈现,因为 64 位数据结构不可能包含 192 位的数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM