Получить NSData в Hex по длине - PullRequest
       14

Получить NSData в Hex по длине

1 голос
/ 18 октября 2011

Я получил NSData, который содержит байты типа <00350029 0033> с длиной 6, есть ли какой-нибудь правильный способ разбить байты на массив как-то вроде (00, 35, 00, 29, 00, 33)?

Ответы [ 3 ]

4 голосов
/ 18 октября 2011
NSData *data = ...;
NSMutableArray *bytes = [NSMutableArray array];
for (NSUInteger i = 0; i < [data length]; i++) {
    unsigned char byte;
    [data getBytes:&byte range:NSMakeRange(i, 1)];
    [bytes addObject:[NSString stringWithFormat:@"%x", byte]];
}
NSLog(@"%@", bytes);

(Предполагается, что вы хотите, чтобы байты были представлены в виде шестнадцатеричной строки, как в вашем примере. В противном случае используйте NSNumber.)

0 голосов
/ 27 января 2012
static NSString* HexStringFromNSData(NSData* data) {
    NSUInteger n = data.length;
    NSMutableString* s = [NSMutableString stringWithCapacity:(2 * n)];
    const unsigned char* ptr = [data bytes];
    for(NSUInteger i = 0; i < n; i++, ptr++) {
        [s appendFormat:@"%02x", (long)*ptr];
    }
    return [NSString stringWithString:s];
}
0 голосов
/ 18 октября 2011

Вы можете использовать метод NSData

- (void)getBytes:(void *)buffer range:(NSRange)range

, чтобы получить байты в заданном диапазоне (после выделения правильного объема памяти, используя malloc), затем использовать

+ (id)dataWithBytes:(const void *)bytes length:(NSUInteger)length

создавать новые небольшие (1 байт) объекты данных, которые вы затем помещаете в массив.Однако, если вы просто извлекаете указатель на сами байты (используя [data bytes]), это дает вам указатель (вид массива в смысле C, не NSArray, но также может быть использован и гораздо более эффективен).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...