本来であれば、サーバ側のインターフェースはUTF-8にして欲しいところですが、諸事情によりshift-jisの文字列をクライアント側で作成しなければいけない場合があって、変換しました。あとで絶対忘れるので、備忘として。
let str = "ほげ"
let sjisStr = str.cString(using: String.Encoding.shiftJIS)
ここでそのまま表示できない形になります。
こんな感じ
[-126, -39, -126, -80, 0]
これはCのcString型になります。実態は[CChar]型です。
これを逆変換でString型に持ってくるのは
let result:String = String.init(cString: sjisStr!)
Swiftの文字列操作周りは未だにコロコロと表記が変わるのでSwift3まで使えた記法がSwift4から全然使えなかったりします。
特にsubStringがなくなってしまったので、文字列操作は結構戸惑います。慣れれば表記が統一されているので使いやすいんじゃないかと思うんですが。。。
なかなか、追っかけるのが大変な言語ですね。
2017年12月15日金曜日
2017年11月21日火曜日
Swiftの数値型と文字列変換のメモ
Swiftで16進数をゴニョゴニョする需要があって、ちょっと調べました。
まず、Swiftでの16進数(n進数)の最もお手軽な扱いは、
Stringで定義する
だそうです。
具体例を挙げると
String(11, radix:16) // a
とか。
ちなみに
Int("a", radix: 16) //10
はイケますが、Intなので全て10進になります。マジかよ。
なので、計算は10進で行って表示など必要な時に、n進数に変換して表示するのがお手軽です。
で、メモなんですが、この"radix"とやら、2とか8とか16とか区切りのいい数字以外にも、17とか、7とか変な数字を17進数とか7進数にしてくれます。
で出てきた疑問。
何進数まで変換できるの?
試して見た所、36進数まで変換できました。36進数?32じゃなくて?
なんだろうとしばし考えたんですが、
0-9とA-Zで表現できる文字の合計が36文字なので、36進数になってるみたいです。
それ以上のn進数が欲しい場合は、素直に割り算の余りを使いましょう、ということみたいです。
つーか
n進数とかでバリバリ計算したいという向きの方は、素直にObjective-Cで書いた方がいいっぽいですね。
2017年1月23日月曜日
登録:
投稿 (Atom)