Swift中Java的Integer.reverseBytes()等价于什么?

liv*_*ech 0 ios swift

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

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
Run Code Online (Sandbox Code Playgroud)

我玩过很多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)"
Run Code Online (Sandbox Code Playgroud)

显然,Int.byteSwapped这不是我想要的。在上面的示例中,这j就是一切的地方。Java代码产生1474560.0,而我的迅速是6333186975989760.0

rob*_*off 6

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>  
Run Code Online (Sandbox Code Playgroud)