NSString型文字列をアスキーコード変換されたNSString型文字として表示
更新が少し遅れました。実は、ついにセブ生活で体調を崩してしまい、1日だけ入院してしまいました。その前からずっと具合が悪かったのですがガタが来ました。。。
ようやく体調も万全になりましたので、これからはエンジニアらしくコーディングで
悩んだところを書きながら皆さんに知識共有でも出来たらなと思います。
あいかわらずiBeaconに興味を持ちながら、作るべくアプリの
アイディアを考えています。
iBeaconでキモになりそうなのが、UUID,major,minorという3つの識別子。
識別子はどれも16進数により表記されています。
「16進数で表記されているということは、簡単な文字情報をビーコンから送る事もできるじゃないかっ」と思ったので、色々アプリを作る時にいじくりまわせるように、
必要な知識を学習しました。
まずはアスキーコード表記での文字のみ(日本語(2バイト文字)等は含まない)ことを前提とした変換コードの紹介。
今回書いたコードは下記の通り。Cならサクッっとコードが書けそうなのですが、
Objective-Cはやはりまだ慣れず、少し思いつくのに時間がまだまだかかります。
それでも少ないライン数で書けたので、個人的には満足。
ラベルには「Test.Okozeki」をそのまま表示テキストビューには「Test.Okozeki」のアスキーコードをそのまま画面に載せています。
NSString* str = @"Test.Okogeki";
NSString* tempstr = @"";
NSString* str2 = @"";
for(int i=0;i < str.length;i++){
tempstr = [NSString stringWithFormat:@"%x",[str characterAtIndex:i]];
str2 = [NSStringstringWithFormat:@"%@%@",str2,tempstr];
}
self.myLabel.text = str;
self.myTextView.text = [NSString stringWithFormat:@"%@",str2];
無事動きました。これで文字を16進数値としてUUID,major,minorに組み込めそうです。後はこれをまた逆変換して文字化すれば、何か有効に使えそうですね。
おまけ
2バイト文字を16進数値化する方法もご紹介します。
が、iBeaconの仕様上、UUID,major,minorをすべて含めても160bitしか長さが無いので、2バイト文字を含めて活用するのは現実的では無いな・・・と考えています。
ちなみに2バイト文字の場合はこんな感じ(UTF8の場合)
NSString *str = @"こんにちわ";
unichar *uchr = (unichar*)[str cStringUsingEncoding:NSUTF8StringEncoding];
この書き方が分かるまでに1時間かかりました・・・。
最初はNSData型に変換して、Byte型に変換してそれからそれから。。。等と
考えてましたが、これでいけるじゃん!というわけで思いつけば簡単。
次回はアスキーコードを文字として復元する部分について記事を書きたいと思います。