iphone - 将 NSData 序列化为十六进制字符串的最佳方法

标签 iphone notifications nsdata

我正在寻找一种很好的 cocoa 方法来将 NSData 对象序列化为十六进制字符串。这个想法是在将用于通知的 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 的十六进制 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] 然后删除空格、< 和 > 更好。剥离角色感觉太“hacky”了。另外,你永远不知道 Apple 将来是否会更改 NSData 的 -description 格式。

注意:有人联系我询问此答案中代码的许可问题。我特此将我在此答案中发布的代码的版权奉献给公共(public)领域。

关于iphone - 将 NSData 序列化为十六进制字符串的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1305225/

相关文章:

Android通知空指针异常

ios - OBJ-C 在无效之前删除 NSData 内容

ios - UIImagePNGRepresentation 内存从未释放

iphone - 为什么 NSHTTPCookieStorage 不能正确保存 cookie?

ios - Objective-C 运行测试时 : Class defined without specifying a base class

iphone - 如何垂直对齐 UITextView 中的文本?

c# - WCF GET 方法未获取 iOS 客户端的最新数据

ios - 快速 iOS 本地通知

php - 无法上传文件 - php & mysql

objective-c - NSDATA writeToFile 无缘无故崩溃