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
'programing' 카테고리의 다른 글
한 번에 여러 행 시드 5 (0) | 2023.08.23 |
---|---|
jQuery에서 텍스트 상자 값을 설정하는 방법은 무엇입니까? (0) | 2023.08.23 |
jQuery, 확인란 및 .is(": 선택됨") (0) | 2023.08.23 |
이전 버전과의 호환성을 위해 Debian의 MySQL 또는 MariaDB에 자동으로 연결하는 API 안정적인 방법 (0) | 2023.08.23 |
Spring Boot Repository와 DAO의 API 비교 (0) | 2023.08.23 |