[解決済み] NSDataを16進文字列にシリアライズする最良の方法
2022-12-28 07:30:48
質問
NSDataオブジェクトを16進数の文字列にシリアライズするための素敵なcocoaの方法を探しています。アイデアは、私のサーバーに送信する前に、通知に使用されるdeviceTokenをシリアライズすることです。
私は以下の実装を持っていますが、私はそれを行うためのいくつかのより短い、より良い方法があるに違いないと考えています。
+ (NSString*) serializeDeviceToken:(NSData*) deviceToken
{
NSMutableString *str = [NSMutableString stringWithCapacity:64];
int length = [deviceToken length];
char *bytes = malloc(sizeof(char) * length);
[deviceToken getBytes:bytes length:length];
for (int i = 0; i < length; i++)
{
[str appendFormat:@"%02.2hhX", bytes[i]];
}
free(bytes);
return str;
}
どのように解決するのですか?
これは、私が書いたNSDataに適用されるカテゴリです。NSDataを16進数のNSStringで表し、データは任意の長さにできます。NSDataが空の場合は空文字列を返します。
NSData+Conversion.h
#import <Foundation/Foundation.h>
@interface NSData (NSData_Conversion)
#pragma mark - String Conversion
- (NSString *)hexadecimalString;
@end
NSData+Conversion.m
#import "NSData+Conversion.h"
@implementation NSData (NSData_Conversion)
#pragma mark - String Conversion
- (NSString *)hexadecimalString {
/* Returns hexadecimal string of NSData. Empty string if data is empty. */
const unsigned char *dataBuffer = (const unsigned char *)[self bytes];
if (!dataBuffer)
return [NSString string];
NSUInteger dataLength = [self length];
NSMutableString *hexString = [NSMutableString stringWithCapacity:(dataLength * 2)];
for (int i = 0; i < dataLength; ++i)
[hexString appendString:[NSString stringWithFormat:@"%02lx", (unsigned long)dataBuffer[i]]];
return [NSString stringWithString:hexString];
}
@end
使用方法
NSData *someData = ...;
NSString *someDataHexadecimalString = [someData hexadecimalString];
を呼び出すよりも良い方法です。
[someData description]
を呼び出して、スペース、<'s、>'s を除去するよりも良い方法です。文字を削除するのは、あまりにもハチャメチャな感じがします。さらに、Apple が NSData の書式を変更するかどうかはわかりません。
-description
のフォーマットを変更するかもしれません。
注意 この回答にあるコードのライセンスについて、私に接触してきた人々がいました。私はここに、この回答で投稿したコードの私の著作権をパブリックドメインに捧げます。
関連
-
[解決済み] UTF-8でエンコードされたNSDataをNSStringに変換します。
-
[解決済み] NSData を String に変換しますか?
-
[解決済み] デバイストークン(NSData)をNSStringに変換するにはどうしたらいいですか?
-
[解決済み] SwiftでNSDataから文字列を初期化する方法
-
[解決済み] UIImageをNSDataに変換する
-
[解決済み] iphone Core Data 保存時に未解決のエラーが発生する。
-
[解決済み] 指定されたエンタイトルメント...プロファイルです。(0xE8008016)と表示されました。エラー iOS 4.2
-
[解決済み] 再署名 IPA (iPhone)
-
[解決済み] 空のUITableViewを処理する。フレンドリーなメッセージを表示する
-
[解決済み] リンカーフラグ -ObjC は何をするのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] UIViewの下に影を描くには?
-
[解決済み] UIPageControlのページネーションドットの色を変更するにはどうしたらよいですか?
-
[解決済み] APNSの.pemファイルを作成する?
-
[解決済み] デバイストークン(NSData)をNSStringに変換するにはどうしたらいいですか?
-
[解決済み] iOS UITableViewのHeaderView(セクションヘッダーではない)を追加する
-
[解決済み] .xibファイルと.storyboardの違いは何ですか?
-
[解決済み] iOSアプリでターゲットのバージョン/ビルド番号をプログラム的に表示するには?
-
[解決済み] drawRectを使うか使わないか(drawRect/Core Graphicsとsubview/imagesをいつ使うか、なぜ使うか)?
-
[解決済み] CALayer setNeedsDisplayInRect:] の暗黙のアニメーションを無効にする。
-
[解決済み] UIWebViewの背景がクリアカラーに設定されているが、透明になっていない