Last active
August 29, 2015 14:09
-
-
Save bimawa/0470d0d57fc821ed0d1e to your computer and use it in GitHub Desktop.
NSData category for converting Data to hex clear string
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@implementation NSData(Hex) | |
-(NSString*)hexRepresentationWithSpaces_AS:(BOOL)spaces | |
{ | |
const unsigned char* bytes = (const unsigned char*)[self bytes]; | |
NSUInteger nbBytes = [self length]; | |
//If spaces is true, insert a space every this many input bytes (twice this many output characters). | |
static const NSUInteger spaceEveryThisManyBytes = 4UL; | |
//If spaces is true, insert a line-break instead of a space every this many spaces. | |
static const NSUInteger lineBreakEveryThisManySpaces = 4UL; | |
const NSUInteger lineBreakEveryThisManyBytes = spaceEveryThisManyBytes * lineBreakEveryThisManySpaces; | |
NSUInteger strLen = 2*nbBytes + (spaces ? nbBytes/spaceEveryThisManyBytes : 0); | |
NSMutableString* hex = [[NSMutableString alloc] initWithCapacity:strLen]; | |
for(NSUInteger i=0; i<nbBytes; ) { | |
[hex appendFormat:@"%02X", bytes[i]]; | |
//We need to increment here so that the every-n-bytes computations are right. | |
++i; | |
if (spaces) { | |
if (i % lineBreakEveryThisManyBytes == 0) [hex appendString:@"\n"]; | |
else if (i % spaceEveryThisManyBytes == 0) [hex appendString:@" "]; | |
} | |
} | |
return hex; | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment