-
Notifications
You must be signed in to change notification settings - Fork 7
/
NSData+SnapAdditions.m
80 lines (63 loc) · 1.65 KB
/
NSData+SnapAdditions.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
//
// NSData+SnapAdditions.m
// Snap
//
// Created by Ray Wenderlich on 5/25/12.
// Copyright (c) 2012 Hollance. All rights reserved.
//
#import "NSData+SnapAdditions.h"
@implementation NSData (SnapAdditions)
-(double)rw_double64;
{
CFSwappedFloat64 *doubleBytes = (CFSwappedFloat64 *)[self bytes];
return CFConvertDoubleSwappedToHost(*doubleBytes);
}
- (int)rw_int32AtOffset:(size_t)offset
{
const int *intBytes = (const int *)[self bytes];
return ntohl(intBytes[offset / 4]);
}
- (short)rw_int16AtOffset:(size_t)offset
{
const short *shortBytes = (const short *)[self bytes];
return ntohs(shortBytes[offset / 2]);
}
- (char)rw_int8AtOffset:(size_t)offset
{
const char *charBytes = (const char *)[self bytes];
return charBytes[offset];
}
- (NSString *)rw_stringAtOffset:(size_t)offset bytesRead:(size_t *)amount
{
const char *charBytes = (const char *)[self bytes];
NSString *string = [NSString stringWithUTF8String:charBytes + offset];
*amount = strlen(charBytes + offset) + 1;
return string;
}
@end
@implementation NSMutableData (SnapAdditions)
- (void) rw_appendDouble64:(double)value
{
CFSwappedFloat64 swappedValue = CFConvertDoubleHostToSwapped(value);
[self appendBytes:&swappedValue length:8];
}
- (void)rw_appendInt32:(int)value
{
value = htonl(value);
[self appendBytes:&value length:4];
}
- (void)rw_appendInt16:(short)value
{
value = htons(value);
[self appendBytes:&value length:2];
}
- (void)rw_appendInt8:(char)value
{
[self appendBytes:&value length:1];
}
- (void)rw_appendString:(NSString *)string
{
const char *cString = [string UTF8String];
[self appendBytes:cString length:strlen(cString) + 1];
}
@end