programing

NSData에서 Swift의 [Uint8]로 전송

telecom 2023. 8. 23. 21:36
반응형

NSData에서 Swift의 [Uint8]로 전송

저는 Swift에서 이 문제에 대한 해결책을 찾을 수 없었습니다(모두 Objective-C이며 Swift에 동일한 형태로 존재하지 않는 포인터를 다루고 있습니다).변환할 수 있는 방법이 있습니까?NSData의 형태로 바이트 배열로 객체화[Uint8]스위프트에서?

포인터를 약간 복잡한 방식으로 사용하거나 새로운 방법으로 사용할 경우 먼저 배열을 자리 표시자 값으로 초기화하지 않도록 할 수 있습니다.Array스위프트 3에 도입된 컨스트럭터:

스위프트 3

let data = "foo".data(using: .utf8)!

// new constructor:
let array = [UInt8](data)

// …or old style through pointers:
let array = data.withUnsafeBytes {
    [UInt8](UnsafeBufferPointer(start: $0, count: data.count))
}

스위프트 2

Array(UnsafeBufferPointer(start: UnsafePointer<UInt8>(data.bytes), count: data.length))

스위프트 5 솔루션

[바이트]에 대한 데이터

extension Data {
    var bytes: [UInt8] {
        return [UInt8](self)
    }
}

[bytes] - 데이터로

extension Array where Element == UInt8 {
    var data: Data {
        return Data(self)
    }
}

재미있지만 더 간단한 해결책이 존재합니다.Swift 3에서 작동합니다.분명히.저는 오늘 이것을 사용했습니다.

data: Data // as function parameter    
let byteArray = [UInt8](data)

이상입니다! :) NSData는 데이터와 쉽게 연결됩니다.

업데이트: (Andrew Koster 코멘트로 인해)

Swift 4.1, Xcode 9.3.1

방금 다시 확인했습니다. 모든 작업이 예상대로 작동합니다.

if let nsData = NSData(base64Encoded: "VGVzdFN0cmluZw==", options: .ignoreUnknownCharacters) {
let bytes = [UInt8](nsData as Data)
print(bytes, String(bytes: bytes, encoding: .utf8))

출력: [84, 101, 115, 116, 83, 116, 114, 105, 110, 103] 옵션("테스트 스트링")

사용할 수 있습니다.getBytes의 기능.NSData해당 바이트 배열을 가져옵니다.

당신이 소스 코드를 제공하지 않았기 때문에 NSData로 변환된 Swift String 내용을 사용하겠습니다.

var string = "Hello World"
let data : NSData! = string.dataUsingEncoding(NSUTF8StringEncoding)

let count = data.length / sizeof(UInt8)

// create an array of Uint8
var array = [UInt8](count: count, repeatedValue: 0)

// copy bytes into array
data.getBytes(&array, length:count * sizeof(UInt8))

println(array)

스위프트 3/4

let count = data.length / MemoryLayout<UInt8>.size

// create an array of Uint8
var byteArray = [UInt8](repeating: 0, count: count)
// copy bytes into array
data.getBytes(&byteArray, length:count)

스위프트 3/4

let data = Data(bytes: [0x01, 0x02, 0x03])
let byteArray: [UInt8] = data.map { $0 }

시도해 보세요

extension Data {
func toByteArray() -> [UInt8]? {
    var byteData = [UInt8](repeating:0, count: self.count)
    self.copyBytes(to: &byteData, count: self.count)
    return byteData
  }
}

swift 4 및 이미지 데이터를 바이트 배열에 저장합니다.

 func getArrayOfBytesFromImage(imageData:Data) ->[UInt8]{

    let count = imageData.count / MemoryLayout<UInt8>.size
    var byteArray = [UInt8](repeating: 0, count: count)
    imageData.copyBytes(to: &byteArray, count:count)
    return byteArray

}

언급URL : https://stackoverflow.com/questions/31821709/nsdata-to-uint8-in-swift

반응형