NSData 与 NSString,Byte数组,UIImage 的相互转换

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
NSData-> NSString
 
NSString *aString = [[NSString alloc] initWithData:adataencoding:NSUTF8StringEncoding];
 
  
 
NSString->NSData
 
NSString *aString = @"1234abcd";
 
NSData *aData = [aString dataUsingEncoding: NSUTF8StringEncoding];
 
  
 
2.NSData 与 Byte
 
NSData-> Byte数组
 
NSString *testString = @"1234567890";
 
NSData *testData = [testString dataUsingEncoding: NSUTF8StringEncoding];
 
Byte *testByte = (Byte *)[testData bytes];
 
for(int i=0;i<[testData length];i++)
 
printf("testByte = %d\n",testByte[i]);
 
  
 
Byte数组-> NSData
 
Byte byte[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23};
 
NSData *adata = [[NSData alloc] initWithBytes:byte length:24];
 
  
 
Byte数组->16进制数
 
Byte *bytes = (Byte *)[aData bytes];
 
NSString *hexStr=@"";
 
for(int i=0;i<[encryData length];i++)
 
{
 
NSString *newHexStr = [NSString stringWithFormat:@"%x",bytes[i]&0xff];///16进制数
 
if([newHexStr length]==1)
 
hexStr = [NSString stringWithFormat:@"%@0%@",hexStr,newHexStr];
 
else
 
hexStr = [NSString stringWithFormat:@"%@%@",hexStr,newHexStr];
 
}
 
NSLog(@"bytes 的16进制数为:%@",hexStr);
 
  
 
16进制数->Byte数组
 
///// 将16进制数据转化成Byte 数组
 
NSString *hexString = @"3e435fab9c34891f"; //16进制字符串
 
int j=0;
 
Byte bytes[128];  ///3ds key的Byte 数组, 128位
 
for(int i=0;i<[hexString length];i++)
 
{
 
int int_ch;  /// 两位16进制数转化后的10进制数
 
  
 
unichar hex_char1 = [hexString characterAtIndex:i]; ////两位16进制数中的第一位(高位*16)
 
int int_ch1;
 
if(hex_char1 >= '0' && hex_char1 <='9')
 
int_ch1 = (hex_char1-48)*16;   //// 0 的Ascll - 48
 
else if(hex_char1 >= 'A' && hex_char1 <='F')
 
int_ch1 = (hex_char1-55)*16; //// A 的Ascll - 65
 
else
 
int_ch1 = (hex_char1-87)*16; //// a 的Ascll - 97
 
i++;
 
  
 
unichar hex_char2 = [hexString characterAtIndex:i]; ///两位16进制数中的第二位(低位)
 
int int_ch2;
 
if(hex_char2 >= '0' && hex_char2 <='9')
 
int_ch2 = (hex_char2-48); //// 0 的Ascll - 48
 
else if(hex_char1 >= 'A' && hex_char1 <='F')
 
int_ch2 = hex_char2-55; //// A 的Ascll - 65
 
else
 
int_ch2 = hex_char2-87; //// a 的Ascll - 97
 
  
 
int_ch = int_ch1+int_ch2;
 
NSLog(@"int_ch=%d",int_ch);
 
bytes[j] = int_ch;  ///将转化后的数放入Byte数组里
 
j++;
 
}
 
NSData *newData = [[NSData alloc] initWithBytes:bytes length:128];
 
NSLog(@"newData=%@",newData);
 
  
 
3. NSData 与 UIImage
 
NSData->UIImage
 
UIImage *aimage = [UIImage imageWithData: imageData];
 
  
 
//例:从本地文件沙盒中取图片并转换为NSData
 
NSString *path = [[NSBundle mainBundle] bundlePath];
 
NSString *name = [NSString stringWithFormat:@"ceshi.png"];
 
NSString *finalPath = [path stringByAppendingPathComponent:name];
 
NSData *imageData = [NSData dataWithContentsOfFile: finalPath];
 
UIImage *aimage = [UIImage imageWithData: imageData];
 
  
 
UIImage-> NSData
 
NSData *imageData = UIImagePNGRepresentation(aimae);