У меня есть длинное шестнадцатеричное значение, хранящееся как NSString, что-то вроде:
c12761787e93534f6c443be73be31312cbe343816c062a278f3818cb8363c701
Как мне преобразовать его обратно в двоичное значение, хранящееся в виде символа *
Это немного неаккуратно, но вы должны встать на правильный путь:
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++; }
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; }
В этой (или очень похожей) теме шестнадцатеричного преобразования была пару недель назад в одном из списков рассылки Cocoa.
Я не могу разумно воспроизвести полное обсуждение здесь (длинная тема), но сообщение, которое начинается с темы, находится здесь:
http://www.cocoabuilder.com/archive/message/cocoa/2009/5/9/236391
Хотелось бы, чтобы для этой задачи был метод Какао, но (в ожидании его нахождения или в ожидании его реализации) код (от Mr Gecko, размещенный по адресу http://www.cocoabuilder.com/archive/message/cocoa/2009/5/10/236424) выглядит так, как будто он будет работать здесь.