事前準備
extension String {
func splitInto(_ length: Int) -> [String] {
var str = self
for i in 0 ..< (str.count - 1) / max(length, 1) {
str.insert(",", at: str.index(str.startIndex, offsetBy: (i + 1) * max(length, 1) + i))
}
return str.components(separatedBy: ",")
}
}
入力された内容を16進数と解釈
func send(text1: String) {
// 16進数キーボード前提
let text2 = text1.splitInto(2) // [String]
let text3 = text2.map { UInt8($0, radix: 16)! } //[UInt8]
let data1 = Data(text3) // [Data.Element]
//ラベルに表示
label1.text = String(data1[0], radix: 16) // 16進数
label2.text = String(data1[1], radix: 16) // 16進数
label3.text = String(data1[2], radix: 16) // 16進数
}
入力された内容をそのままutf8で解釈
func send(text: String) {
// ASCIIキーボード前提
let utf8 = text.data(using: .utf8)! // Data
//ラベルに表示
label4.text = String(utf8[0],radix: 16) // utf8
label5.text = String(utf8[1],radix: 16) // utf8
label6.text = String(utf8[2],radix: 16) // utf8
}
###参考
Swift 3 で16進数文字列と整数の相互変換 - Qiita
https://qiita.com/y13i/items/9af41a1cb507a4b388e0
【Swift5】Data・UInt8のextension備忘録 - Qiita
https://qiita.com/haru15komekome/items/c8d9c3a1a11f0813acdb
【Swift】Data型によるUIntについて
https://zenn.dev/masakunn/articles/c23f64c22f330c
How do I convert UInt8 to Data? | Apple Developer Forums
https://developer.apple.com/forums/thread/119114
//UInt8 to Data
let value: UInt8 = 123
let data = Data([value])
//Data to UInt8
let originalValue = data[0]
print(originalValue) //->123
//[UInt8] to Data
let arrValue: [UInt8] = [123, 234]
let arrData = Data(arrValue)
//Data to [UInt8]
let originalValues = Array(arrData)
print(originalValues) //->[123,234]
//Data to String?
let string = String(data: value, encoding : .utf8) //String?
//Data to String
if let string = String(data: value, encoding : .utf8) {
...
} else {
...
} //String
UInt8の16進数を2桁表示したい
(何も意識せずに処理すると、先頭が0の場合、1桁だけになってしまう)
【Swift入門】数値を文字列(String)にformatする方法 | 侍エンジニアブログ
https://www.sejuku.net/blog/34872
String(format: "%02d", i)