gpt4 book ai didi

ios - Swift 中 Java 的 Integer.reverseBytes() 的等价物是什么?

转载 作者:行者123 更新时间:2023-11-28 10:04:36 24 4
gpt4 key购买 nike

我正在开发一个在 Q Number format 中读取一些字符串的应用程序。

Java 实现像这样转换字符串:

int i = Integer.parseInt("00801600", 16);
System.out.println("Number from Integer.parseInt = " + i); // i=8394240
float j = Integer.reverseBytes(i);
System.out.println("After Integer.reverseBytes = " + j); // j=1474560.0
float k = j / 65536; //TWO_POWER_OF_16 = 65536
System.out.println("After Q division = " + k); // k=22.5

我玩过很多 swift 函数的组合,这(希望)非常接近:

let i: Int = Int("00801600", radix: 16) ?? 0
let istr = "Number from Int = \(i)"
let j: Double = Double(i.byteSwapped)
let jstr = "After byte swapping = \(j)"
let k: Double = Double(j) / 65536.0
let kstr = "After Q division = \(k)"

显然,Int.byteSwapped 不是我要找的。在我上面的例子中,j 是一切都偏离轨道的地方。 Java 代码生成 1474560.0,而我的 swift 是 6333186975989760.0

最佳答案

Java int 始终是 32 位,因此 Integer.reverseBytes 将 0x00801600 转换为 0x00168000。

Swift Int 在 32 位平台上是 32 位,在 64 位平台(这是大多数当前平台)上是 64 位。所以在 32 位平台上,i.byteSwapped 将 0x00801600 变成 0x00168000,但在 64 位平台上,i.byteSwapped 将 0x0000000000801600 变成 0x0016800000000000。

如果你想要 32 位,请明确:

  1> let i = Int32("00801600", radix: 16)!
i: Int32 = 8394240
2> let j = Double(i.byteSwapped)
j: Double = 1474560
3> let k = j / 65536
k: Double = 22.5
4>

关于ios - Swift 中 Java 的 Integer.reverseBytes() 的等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56222323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com