我有一个长的十六进制值存储为 NSString,类似于:
c12761787e93534f6c443be73be31312cbe343816c062a278f3818cb8363c701
如何将其转换回存储为 char* 的二进制值
我有一个长的十六进制值存储为 NSString,类似于:
c12761787e93534f6c443be73be31312cbe343816c062a278f3818cb8363c701
如何将其转换回存储为 char* 的二进制值
这有点草率,但应该让你走上正轨:
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++;
}
几周前在一个 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)看起来它可以在这里工作。
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;
}