如何将带有Hexvalue的NSString转换为二进制char *?

时间:2009-05-28 02:57:19

标签: objective-c cocoa nsstring

我有一个长十六进制值存储为NSString,如:

c12761787e93534f6c443be73be31312cbe343816c062a278f3818cb8363c701

如何将其转换回存储为char *

的二进制值

3 个答案:

答案 0 :(得分:1)

这有点草率,但应该让你走上正轨:

NSString *hexString = @"c12761787e93534f6c443be73be31312cbe343816c062a278f3818cb8363c701";
char binChars[128]; // I'm being sloppy and just making some room
const char *hexChars = [hexString UTF8String];
NSUInteger hexLen = strlen(hexChars);
const char *nextHex = hexChars;
char *nextChar = binChars;
for (NSUInteger i = 0; i < hexLen - 1; i++)
{
    sscanf(nextHex, "%2x", nextChar);
    nextHex += 2;
    nextChar++;
}

答案 1 :(得分:0)

在一个Cocoa邮件列表上,有几个星期回复了这个(或非常相似的)十六进制转换主题。

我无法合理地重现这里的完整讨论(长线程),但是从线程开始的消息在这里:

http://www.cocoabuilder.com/archive/message/cocoa/2009/5/9/236391

我确实希望有一个Cocoa方法来执行此任务,但是(等待发现或等待其实现)代码(由Gecko先生发布,http://www.cocoabuilder.com/archive/message/cocoa/2009/5/10/236424)看起来它可以在这里工作。

答案 2 :(得分:0)

static NSString* hexval(NSData *data) {
    NSMutableString *hex = [NSMutableString string];
    unsigned char *bytes = (unsigned char *)[data bytes];
    char temp[3];
    int i = 0;
    for (i = 0; i < [data length]; i++) {
        temp[0] = temp[1] = temp[2] = 0;
        (void)sprintf(temp, "%02x", bytes[i]);
        [hex appendString:[NSString stringWithUTF8String: temp]];
    }
    return hex;
}