由于Swift 3倾向于Data而不是[UInt8],我试图找出最有效/惯用的编码/解码方式将各种数字类型(UInt8,Double,Float,Int64等)作为数据对象.
对于使用[UInt8]有这个答案,但它似乎使用了我在Data上找不到的各种指针API.
我想基本上一些自定义扩展看起来像:
let input = 42.13 // implicit Double
let bytes = input.data
let roundtrip = bytes.to(Double) // --> 42.13
Run Code Online (Sandbox Code Playgroud)
真正逃避我的部分,我已经查看了一堆文档,我是如何从任何基本结构(所有数字都是)得到某种指针的东西(OpaquePointer或BufferPointer或UnsafePointer?).在C中,我只是在它前面拍一个&符号,然后就去了.
为了将字节数组转换为double,我发现了这个:
//convert 8 byte array to double
int start=0;//???
int i = 0;
int len = 8;
int cnt = 0;
byte[] tmp = new byte[len];
for (i = start; i < (start + len); i++) {
tmp[cnt] = arr[i];
//System.out.println(java.lang.Byte.toString(arr[i]) + " " + i);
cnt++;
}
long accum = 0;
i = 0;
for ( int shiftBy = 0; shiftBy < 64; shiftBy += 8 ) {
accum |= ( (long)( tmp[i] & 0xff ) ) << shiftBy; …Run Code Online (Sandbox Code Playgroud) 我正在使用 Swift 并尝试将 Int(例如:-1333)转换为 4 个字节的字节数组。我能够将 Int 转换为 8 个字节的数组(-1333 变为 [255, 255, 255, 255, 255, 255, 250, 203]),但我需要它是 4 个字节。我知道有其他方法可以用其他语言(比如 Java)来做到这一点,但是 Swift 有没有办法呢?这是我的代码:(我使用了这个答案)
func createByteArray(originalValue: Int)->[UInt8]{
var result:[UInt8]=Array()
var _number:Int = originalValue
let mask_8Bit=0xFF
var c=0
var size: Int = MemoryLayout.size(ofValue: originalValue)
for i in (0..<size).reversed(){
//at: 0 -> insert at the beginning of the array
result.insert(UInt8( _number&mask_8Bit),at:0)
_number >>= 8 //shift 8 times from left to right
}
return result
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Swift 中将浮点的连续数组转换为字节数组,但在不使用 for 循环的情况下无法找到明智的方法。我一直在关注以前的帖子,例如How to conversion a double into a byte array in swift? ,但如果不逐一迭代获取每个元素,我无法检索数组的内容。
有没有一种优雅的方法可以直接将 ContigouslyArray 的字节“复制”到字节数组?
PS:我已经成功实现了将结构转换为字节数组,但无法对数组执行相同的操作。
对于iPhone5 (10.2) 模拟器此功能:
static func fromByteArray<T>(_ value: [UInt8], _: T.Type) -> T {
return value.withUnsafeBytes {
$0.baseAddress!.load(as: T.self)
}
}
Run Code Online (Sandbox Code Playgroud)
$0.baseAddress!.load(as: T.self)因此错误而崩溃:
致命错误:从未对齐的原始指针加载
有人知道解决方案吗?
我正在使用此代码:
编辑 它适用于 iPhone5s 但不适用于 iPhone5
swift ×4
arrays ×1
binaryfiles ×1
byte ×1
bytearray ×1
double ×1
ios ×1
java ×1
swift-data ×1
swift3 ×1