我有一个长十六进制值存储为NSString,如:
c12761787e93534f6c443be73be31312cbe343816c062a278f3818cb8363c701
如何将其转换回存储为char *
的二进制值答案 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;
}