如何在 Swift 中将浮点数组保存为 txt 文件

Posted

技术标签:

【中文标题】如何在 Swift 中将浮点数组保存为 txt 文件【英文标题】:How to save a Float array in Swift as txt file 【发布时间】:2021-01-21 19:55:55 【问题描述】:

首先:我真的想将数组保存为.txt 文件。 .plist 是不可能的。

原因:之后我想使用 C++ 将它保存到向量中。用包装器意识到这一点已经让我发疯了。

这是我的代码:

guard let buf = AVAudioPCMBuffer(pcmFormat: format!, frameCapacity: AVAudioFrameCount(file.length)) 
else throw NSError()

try file.read(into: buf)

guard buf.floatChannelData != nil elseprint("Channel Buffer konnte nicht erstellt werden")
                throw NSError()

let samples = Array(UnsafeBufferPointer(start:buf.floatChannelData![0],count:Int(buf.frameLength)))
var wData = Data(samples)
try! wData.write(to: outputURL())
 

但是不可能用浮点值初始化数据,不是吗?

如何将浮点值数组写入.txt 文件?

【问题讨论】:

为什么不直接使用JSONEncoder对其进行编码? 你也可以保存它的原始字节 @LeoDabus 我还没有与 JSON 编码器有任何联系。应该怎么做呢? 【参考方案1】:

问题本身的答案(另存为 txt),您可以将浮点数数组保存为 JSON 字符串。使用 JSONEncoder/JSONDecoder 对其进行编码和解码应该非常简单。

let values: [Float] = [-.pi, .zero, .pi, 1.5, 2.5]

let encoded = try! JSONEncoder().encode(values)
print(String(data: encoded, encoding: .utf8)!)  // "[-3.1415925025939941,0,3.1415925025939941,1.5,2.5]\n"
let decoded = try! JSONDecoder().decode([Float].self, from: encoded)  // [-3.141593, 0, 3.141593, 1.5, 2.5]

“但是用浮点值初始化数据是不可能的,不是吗?”

是的,如果绝对可以将浮点数组转换为数据/字节并将其读回。最好保留确切的值以避免转换为字符串:

extension Array 
    var bytes: [UInt8]  withUnsafeBytes  .init($0)  
    var data: Data  withUnsafeBytes  .init($0)  

extension ContiguousBytes 
    func object<T>() -> T  withUnsafeBytes  $0.load(as: T.self)  
    func objects<T>() -> [T]  withUnsafeBytes  .init($0.bindMemory(to: T.self))  


let values: [Float] = [-.pi, .zero, .pi, 1.5, 2.5]
let bytes = values.bytes  // [218, 15, 73, 192, 0, 0, 0, 0, 218, 15, 73, 64, 0, 0, 192, 63, 0, 0, 32, 64]
let data = values.data    // 20 bytes
let minusPI: Float = data.subdata(in: 0..<4).object() // -3.141593
let loaded1: [Float] = bytes.objects()  // [-3.141593, 0, 3.141593, 1.5, 2.5]
let loaded2: [Float] = data.objects()   // [-3.141593, 0, 3.141593, 1.5, 2.5]

【讨论】:

哇,这已经很好了。我在编码后写了这一行:try encoded.write(to: outputURL()) 我得到了一个包含我想要的值的 Txt 文件。 @HannesBroschk 很高兴为您提供帮助

以上是关于如何在 Swift 中将浮点数组保存为 txt 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 3 中将自定义类保存为 CoreData 实体的属性?

如何在swift中将json数组保存和检索到用户默认值?

如何在 Swift 中将字符串数组保存到 Core Data

如何在Java中将浮点数组转换为双精度数组?

如何在 iOS Swift 中将选定的 tableView 单元格保存到数组中?

在 C# 中将对象数组转换为浮点数组 [关闭]