Advertise here

Advertise here

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

NSData to Hex String

edited November 2009 in iOS SDK Development

I have a SecKeyRef () from generating a private/public key pair with the CryptoExercise from Apple (CryptoExercise).

This is a NSData which I will transform to a hex string.
I found these two implementations:
@interface NSData (NSData_HexAdditions)
- (NSString*) stringWithHexBytes1;
- (NSString*) stringWithHexBytes2;

@implementation NSData (NSData_HexAdditions)
- (NSString*) stringWithHexBytes {
	NSMutableString *stringBuffer = [NSMutableString stringWithCapacity:([self length] * 2)];
	const unsigned char *dataBuffer = [self bytes];
	int i;
	for (i = 0; i < [self length]; ++i) {
		[stringBuffer appendFormat:@%02X, (unsigned long)dataBuffer[i]];
	return [[stringBuffer copy] autorelease];

- (NSString*)stringWithHexBytesss {
	static const char hexdigits[] = "0123456789ABCDEF";
	const size_t numBytes = [self length];
	const unsigned char* bytes = [self bytes];
	char *strbuf = (char *)malloc(numBytes * 2 + 1);
	char *hex = strbuf;
	NSString *hexBytes = nil;

	for (int i = 0; i<numBytes; ++i) {
		const unsigned char c = *bytes++;
		*hex++ = hexdigits[(c >> 4) & 0xF];
		*hex++ = hexdigits[(c ) & 0xF];
	*hex = 0;
	hexBytes = [NSString stringWithUTF8String:strbuf];
	return hexBytes;
And I use it so:
[publicKey stringWithHexBytes1]
[publicKey stringWithHexBytes2]

Both results are the same, but which one is faster and should I use?

And: I put the above source code in my ABCController.m. I think it is not a good idea to do that. Should I create a NSData.h and NSData.m class for that code or what's the best solution?

Thanks & Regards.
Sign In or Register to comment.