พอดีผมมีงานที่ต้องมีการใช้การแปลงจากเลขฐาน 16 หรือเรียกย่อๆว่า hex ไปเป็นตัวอักษรหรือ char จากการค้นหาข้อมูลจึงได้วิธีการดังนี้
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
func hex2ascii (example: String) -> String { var chars = [Character]() for c in example.characters { chars.append(c) } let numbers = stride(from: 0, to: chars.count, by: 2).map{ strtoul(String(chars[$0 ..< $0+2]), nil, 16) } var final = "" var i = 0 while i < numbers.count { if let myChar = decToChar(number: Int(numbers[i])) { final.append(myChar) } else { final.append(Character(UnicodeScalar(UInt32(numbers[i]))!)) } i += 1 } return final } |
ซึ่งเป็นฟังก์ชันในการแปลง เมื่อทดสอบการใช้งาน
เลขฐาน 16 คือ
31A1A131323334
ค่าที่ควรจะแปลงได้ “1กก1234“
แต่เมื่อรันจากฟังก์ชันข้างต้นจะได้ผลเป็น 1¡¡1234 ซึ่งจะเห็นได้ว่าผิดตรงตัวอักษรภาษาไทย เนื่องจากว่าในภาษา swift ไม่รองรับ tis-620 โค้ดที่เราจะใช้แปลงต้องเป็น tis-620
แต่ก็มีวิธีแก้ไขคือ เราจะแปลง tis-620 เป็น utf16 ด้วยการเติม 0E นำหน้า hex และลบออกด้วย A0 จากนั้นอ่านค่ากลับมาเป็น char ก็จะได้อักษรภาษาไทยแล้วครับ จะได้โค้ดประมาณนี้ครับ
ต้องขอขอบคุณข้อมูลจาก
ก่อนหน้าที่ผมจะได้คำตอบนี้ ผมได้ใช้วิธีสร้างฟังก์ชันเพื่อแปลงภาษาไทยโดยเฉพาะ ชื่อฟังก์ชันคือ decToChar()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
func decToChar(number: Int) -> String? { switch number { case 161: return "ก" case 162: return "ข" case 163: return "ฃ" case 164: return "ค" case 165: return "ฅ" case 166: return "ฆ" case 167: return "ง" case 168: return "จ" case 169: return "ฉ" case 170: return "ช" case 171: return "ซ" case 172: return "ฌ" case 173: return "ญ" case 174: return "ฎ" case 175: return "ฏ" case 176: return "ฐ" case 177: return "ฑ" case 178: return "ฒ" case 179: return "ณ" case 180: return "ด" case 181: return "ต" case 182: return "ถ" case 183: return "ท" case 184: return "ธ" case 185: return "น" case 186: return "บ" case 187: return "ป" case 188: return "ผ" case 189: return "ฝ" case 190: return "พ" case 191: return "ฟ" case 192: return "ภ" case 193: return "ม" case 194: return "ย" case 195: return "ร" case 196: return "ฤ" case 197: return "ล" case 198: return "ฦ" case 199: return "ว" case 200: return "ศ" case 201: return "ษ" case 202: return "ส" case 203: return "ห" case 204: return "ฬ" case 205: return "อ" case 206: return "ฮ" default: return nil } } |
แต่แปลงจาก dec เป็น char ครับ ซึ่งเอาไปใช้ในฟังก์ชันแรก แทรกเข้าไปดังนี้ครับ
จบเพียงเท่านี้ครับ ขอบคุณครับ
0