【发布时间】:2021-09-14 19:31:28
【问题描述】:
我正在尝试基于现有的 Android 应用程序构建 iOS 应用程序,并且必须将涉及位移的函数从 Java 转换为 Swift。这是Java中的原始函数:
public static void BUF_U32_BE(byte[] d, int loc, int val) {
d[loc] = (byte)(val >> 24);
d[loc+1] = (byte)(val >> 16);
d[loc+2] = (byte)(val >> 8);
d[loc+3] = (byte)(val & 0xFF);
}
这是我将函数转换为 Swift 的尝试:
func BUF_U32_BE(byteArray: [UInt8], loc: Int, val: Int) -> [UInt8]{
var d = byteArray;
d[loc] = UInt8((val >> 24));
d[loc+1] = UInt8((val >> 16));
d[loc+2] = UInt8((val >> 8));
d[loc+3] = UInt8((val & 0xFF));
return d;
}
运行 Swift 版本时,出现错误:
致命错误:没有足够的位来表示传递的值
这是产生错误的行:
d[loc+1] = UInt8((val >> 16));
什么可能导致这个问题,我应该怎么做才能解决它?
【问题讨论】:
-
我不知道 swift 但是这
UInt8((val >> 16) & 0xFF);有效吗?
标签: java android ios swift bit-manipulation