Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Threema/ThreemaFramework/Utilities/   (Social Medium ©)  Datei vom 26.9.2026 mit Größe 1 kB image not shown  

Quelle  NSString+Hex.m  Sprache: unbekannt

 
Spracherkennung für: .m vermutete Sprache: Lisp {Lisp[44] Masm[44] ABAP[40]} [Methode: maximale Elemente, drei Dimensionen]

#import "NSString+Hex.h"
#import <stdio.h>
#import <stdlib.h>
#import <string.h>

@implementation NSString (Hex)

+ (NSString*)stringWithHexData:(NSData*)data {
    unsigned char *c = (unsigned char*)data.bytes;
    if (c == nil)
        return nil;
    
    NSUInteger n = data.length;
    NSMutableString* s = [NSMutableString stringWithCapacity:(2 * n)];
    for (NSUInteger i = 0; i < n; i++) {
        [s appendFormat:@"%02x", c[i]];
    }
    return s;
}

- (NSData*)decodeHex
{
    const char *hexChars = [self cStringUsingEncoding:NSASCIIStringEncoding];
    if (hexChars == NULL)
        return nil;
    
    NSUInteger length = strlen(hexChars);
    unsigned char *bytes = malloc(length / 2);
    unsigned char lastnib = 0xff;
    NSUInteger n = 0;
    NSUInteger i;
    
    for (i = 0; hexChars[i] != 0; i++) {
        unsigned char curhex = hexChars[i];
        unsigned char curnib;
        if (curhex >= '0' && curhex <= '9')
            curnib = curhex - '0';
        else if (curhex >= 'a' && curhex <= 'f')
            curnib = curhex - 'a' + 0x0a;
        else if (curhex >= 'A' && curhex <= 'F')
            curnib = curhex - 'A' + 0x0a;
        else
            continue; /* ignore unknown character */
    
        if (lastnib != 0xff) {
            /* we have another full byte */
            bytes[n] = (lastnib << 4) | curnib;
            n++;
            lastnib = 0xff;
        } else {
            lastnib = curnib;
        }
    }
    
    return [NSData dataWithBytesNoCopy:bytes length:n];
}

@end

[Dauer der Verarbeitung: 0.10 Sekunden]