1

我有一个长的十六进制值存储为 NSString,类似于:

c12761787e93534f6c443be73be31312cbe343816c062a278f3818cb8363c701

如何将其转换回存储为 char* 的二进制值

4

3 回答 3

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++;
}
于 2009-05-28T03:42:04.687 回答
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)看起来它可以在这里工作。

于 2009-05-28T14:24:58.200 回答
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;
}
于 2009-06-12T07:19:49.147 回答