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

原文网址:http://www.cnblogs.com/jacktu/archive/2011/11/08/2241528.html

1. NSData 与 NSString
NSData-> NSString
NSString *aString = [[NSString alloc] initWithData:adata encoding: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);

 
原文网址:http://blog.sina.com.cn/s/blog_6268f10201015ak8.html
以binary来收藏容纳文件

NSData生成:

NSDictionary *dic =[NSDictionary dictionaryWithObject:@"hello" forKey:@"KEY"];
NSData *d = [NSKeyedArchiver archivedDataWithRootObject:dic];

 

从文件生成NSData:

NSBundle *bundle = [NSBundle mainBundle];
NSString *path = [bundle pathForResource:@"hello"  ofType:@"png"];
NSData *d = [[NSData alloc] initWithContentsOfFile:  path];

 

取得元素长度:

int i = [d length];

NSData型转成NSDictionary型:

NSDictionary *reverse = [NSKeyedUnarchiver unarchiveObjectWithData: d];

NSData *data = [NSData dataWithContentsOfFile:filePath];
NSUInteger len = [data length];
Byte *byteData = (Byte*)malloc(len);
memcpy(byteData, [data bytes], len);

NSString *strPath = @"/Users/user/Desktop/jkk.txt";
NSLog(@"string = %@",[[NSString alloc]initWithContentsOfFile:strPath encoding:NSUTF8StringEncoding error:Nil]);
NSData *strData = [[NSData alloc]initWithContentsOfFile:strPath];
NSLog(@"size = %d字节; strData = %@",strData.length,strData.description);

NSUInteger len = [strData length];
Byte *byteData = (Byte*)malloc(len);
memcpy(byteData, [strData bytes], len);

for (int i = 0; i < len; i++) {
printf("%c",byteData[i]);
}

NSData *Data222 = [[NSData alloc]initWithBytes:byteData length:len];
NSLog(@"Data222 : %@",Data222);

NSRange rangeData = {0,3};
NSData *subData = [strData subdataWithRange:rangeData];
NSLog(@"subData : %@",subData);

NSData *Data333 = [[NSData alloc]initWithData:subData];
NSLog(@"Data333: %@",[[NSString alloc]initWithData:Data333 encoding:NSUTF8StringEncoding]);

 

How to turn 4 bytes into a float in objective-c from NSData

原文网址:http://stackoverflow.com/questions/30608669/how-to-turn-4-bytes-into-a-float-in-objective-c-from-nsdata

NSData* data = [NSData dataWithContentsOfFile:@"/tmp/java/test.dat"];

    int32_t bytes;
[data getBytes:&bytes length:sizeof(bytes)]; bytes = OSSwapBigToHostInt32(bytes); float number;
memcpy(&number, &bytes, sizeof(bytes)); NSLog(@"Float %f", number); NSString与int和float的相互转换

NSString *tempA = @"123";

NSString *tempB = @"456";

1,字符串拼接

NSString *newString = [NSString stringWithFormat:@"%@%@",tempA,tempB];

2,字符转int

int intString = [newString intValue];

3,int转字符

NSString *stringInt = [NSString stringWithFormat:@"%d",intString];

4,字符转float

float floatString = [newString floatValue]

5,float转字符

NSString *stringFloat = [NSString stringWithFormat:@"%f",intString];

iPhone: @selector 里面的方法名加参数 NSTimer and that thing called userInfo

NSTimer携带传递值
NSTimer有个属性 叫userInfo,下面的方法的第四个参数userInfo

+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;

userinfo用NSTimer的实例可以获得,返回类型是 id
 [timer userInfo];

[NSTimer scheduledTimerWithTimeInterval:0.25 target:self selector:@selector(handleTimer:) userInfo:@"参数" repeats:YES];
用的时候只要在下面函数里调用强制转换的userinfo就行,
-(void)handleTimer:(NSTimer*)timer
{
//这里使用(NSString *)[timer userInfo]
}

-(void)handleTimer:(NSTimer*)timer

这里最好用id做参数
-(void)handleTimer:(id)timer

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];

if(oldView != nil){

[dict setObject:oldView forKey:@"oldView"];

}

if(newView != nil){

[dict setObject:newView forKey:@"newView"];

}

[NSTimer scheduledTimerWithTimeInterval:0.0 target:self selector:@selector(onTimer:) userInfo:dict repeats:NO];

[dict release];

- (void)onTimer:(NSTimer *)timer {

UIView *oldView = [[timer userInfo] objectForKey:@"oldView"];

UIView *newView = [[timer userInfo] objectForKey:@"newView"];

[UIView animateWithDuration:2.0  delay:0

options:UIViewAnimationOptionAllowUserInteraction

animations:^{

oldView.alpha = 0.0;

newView.alpha = 1.0;

}

4.在学习OC代码的时候,编译oc .m文件有如下两种方式(1) clang -fobjc-arc -framework Foundation Hello.m -o hello.out

./hello.out

(2) 用xcode编译.m后生成的可执行文件hello和源码hello.m不在同一个目录

通过右击 hello, show in finder可以找到hello可执行文件

或者通过下面的代码查看
To get the path to your file use

NSString * myFile = [[NSBundle mainBundle]pathForResource:@"Alert" ofType:@"txt"];
NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath: myFile ]){
NSLog(@"good");
}
这个问题是在学习NSFileManger的时候,使用NSFileManger创建的文件,在源码的文件夹中找不到,
上面的方式可以查看到实际的路径:
/Users/yqf/Library/Developer/Xcode/DerivedData/NSFileManagerTest2-eaeuwbogilljalgvxymvlvdqwjwb/Build/Products/Debug/NSFile

5. Xcode workSpace与Project配置

原文网址:http://blog.sina.com.cn/s/blog_13edf9b370102w8r4.html

方式一 右键add

WorkSpace中添加已有的工程-方式1.png
  • 注意点1 选择工程时,选后缀名为.xcodeproj 的工程配置文件,而不是选择整个工程的父文件夹。
方式二 直接拖
  • 注意点1 拖到面板的时候,鼠标要放在最上方,不然会导致工程

    WorkSpace中添加已有的工程-方式二-1.png
  • 注意点2 只能托后缀名为.xcodeproj 的工程配置文件

    WorkSpace中添加已有的工程-方式二-2.png
方式三
    1. 直接选择菜单栏中的new->project
      但是必须选择ADD TO WorkSpace

      WorkSpace中添加已有的工程-方式三.png

6. 用NSScanner判断String内容是否为整型或者浮点型数据

原文网址:http://cocoa-chen.github.io/blog/2014/10/27/yong-nsscannerpan-duan-stringnei-rong-shi-fou-wei-zheng-xing-huo-zhe-fu-dian-xing-shu-ju/

在开发的过程中会遇到各种各样的需求,比如需要判断一个NSString的变量内容是否为Int数据或者Float数据,这时候可以用NSScanner来简单的判断下

1.判断NSString是否为int内容
1
2
3
4
5
6
7
8
- (BOOL)isPureInt:(NSString *)string{
if (!string) {
return NO;
}
NSScanner *_scanner = [NSScanner scannerWithString:string];
int val;
return [_scanner scanInt:&val] && [_scanner isAtEnd];
}
调用测试如下:
1
2
3
4
5
6
NSString *pureIntString = @"123";
NSString *noPureIntString = @"123ab";
BOOL isPure1 = [self isPureInt:pureIntString];
NSLog(@"'%@'字符串%@int内容的字符串",pureIntString,isPure1 ? @"是" : @"不是");
BOOL isPure2 = [self isPureInt:noPureIntString];
NSLog(@"'%@'字符串%@int内容的字符串",noPureIntString,isPure2 ? @"是" : @"不是");
2.判断NSString是否为float内容
1
2
3
4
5
6
7
8
- (BOOL)isPureFloat:(NSString *)string{
if (!string) {
return NO;
}
NSScanner* scan = [NSScanner scannerWithString:string];
float val;
return [scan scanFloat:&val] && [scan isAtEnd];
}
调用测试如下:
1
2
3
4
5
6
NSString *pureFloatString = @"1.23";
NSString *nopureFloatString = @"1.23a";
BOOL isPure1 = [self isPureFloat:pureFloatString];
NSLog(@"'%@'字符串%@float内容的字符串",pureFloatString,isPure1 ? @"是" : @"不是");
BOOL isPure2 = [self isPureFloat:nopureFloatString];
NSLog(@"'%@'字符串%@float内容的字符串",nopureFloatString,isPure2 ? @"是" : @"不是");
NSScanner还提供其他的API来检测对应的数据类型,遇到对应的需求大家可以尝试使用一下!

7.  Objective-C 拆分字符串成数组(类似java 的 split)

原文网址:http://blog.csdn.net/sirodeng/article/details/8306288

在很多语言如 java , ruby , python中都有将字符串切分成数组或者将数组元素以某个间隔字符串间隔形成新的数组。 其实NSArray也提供了这样的功能。

使用-componentsSeparatedByString:来切分NSArray。 如:

引用
NSString *string = @”one:two:three”; 
NSArray *aArray = [string componentsSeparatedByString:@":"];

用-componentsJoinedByString:来合并NSArray中的各个元素并创建一个新的字符串,如: 
string = [aArray componentsJoinedByString:@","];

这样,上面的数组就中的各个元素就以”,”分割形成一个字符串。

8. ios 开发 NSArray 排序 (根据NSString的值排序)

原文网址:http://blog.csdn.net/wenluma/article/details/8705272

  1. NSMutableArray *array =  [[NSMutableArray alloc] initWithObjects:@"1",@"3",@"5",@"40" nil];</span></p>NSArray *sorteArray = [array sortedArrayUsingComparator:^(id obj1, id obj2){
  2. if ([obj1 integerValue] > [obj2 integerValue]) {
  3. return (NSComparisonResult)NSOrderedDescending;
  4. }
  5. if ([obj1 integerValue] < [obj2 integerValue]) {
  6. return (NSComparisonResult)NSOrderedAscending;
  7. }
  8. return (NSComparisonResult)NSOrderedSame;
  9. }];
  10. NSLog(@"%@",sorteArray);            //从小到大
  11. NSArray *array2 = [array sortedArrayUsingComparator:^(id obj1, id obj2){
  12. if ([obj1 integerValue] > [obj2 integerValue]) {
  13. return (NSComparisonResult)NSOrderedAscending;
  14. }
  15. if ([obj1 integerValue] < [obj2 integerValue]) {
  16. return (NSComparisonResult)NSOrderedDescending;
  17. }
  18. return (NSComparisonResult)NSOrderedSame;
  19. }];
  20. NSLog(@"%@",array2);

以上包含了有从小到大的排序,也包含有大到小的排序

如果是针对字符串的排序,有更好的方法,

[cpp] view plain copy

  1. NSArray *ary = @[@"a3",@"a1",@"a2",@"a10",@"a24"];
  2. NSLog(@"%@",ary);
  3. NSArray *myary = [ary sortedArrayUsingComparator:^(NSString * obj1, NSString * obj2){
  4. return (NSComparisonResult)[obj1 compare:obj2 options:NSNumericSearch];
  5. }];
  6. NSLog(@"%@",myary);
  7. 结果
  8. ( a3,a1, a2, a10, a24 )
  9. ( a1, a2,a3, a10, a24 )
  1. NSArray *ary = @[@"a3",@"a1",@"a2",@"a24",@"a14"];
  2. NSLog(@"%@",ary);
  3. NSSortDescriptor *sd1 = [NSSortDescriptor sortDescriptorWithKey:nil ascending:NO];//yes升序排列,no,降序排列
  4. NSArray *myary = [ary sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sd1, nil]];//注意这里的ary进行排序后会生产一个新的数组指针,myary,不能在用ary,ary还是保持不变的。
  5. NSLog(@"%@",myary);
  6. //    (a3, a1, a2,a24,a14)
  7. //    (a3, a24, a2, a14, a1)
  1. [ary sortedArrayUsingSelector:@selector(compare:)];//这个是一直默认升序

8. 判断NSString是否包含某个字符串

在iOS8以后,还可以用下面的方法来判断是否包含某字符串:

//在iOS8中你可以这样判断
NSString *str = @"hello world";
if ([str containsString:@"world"]) {
NSLog(@"str 包含 world");
} else {
NSLog(@"str 不存在 world");
}

29. objective-c 下面int 和 NSData数据 互相转换的方法

原文网址:http://blog.csdn.net/ixfly/article/details/7662096
int i = 1;
NSData *data = [NSData dataWithBytes: &i length: sizeof(i)];
int i;
[data getBytes: &i length: sizeof(i)];

最新文章

  1. 安卓SeekBar
  2. Lattice FPGA 板子 调试笔记
  3. web前端安全 XSS跨站脚本 CSRF跨站请求伪造 SQL注入
  4. DataStage
  5. mongod 命令执行发现已经有进程在运行mongod数据库--errno:48 Address already in use for socket: 0.0.0.0:27017
  6. Map的基本用法(Java)
  7. hdu 3938 Portal(并查集+离线+kruskal)2011 Multi-University Training Contest 10
  8. android和javascript之间相互通信实例分析
  9. 老李分享知识:性能测试之TPS和吞吐率
  10. django framework相关的错误信息
  11. Vue基础之初识Vue
  12. MySQL数值类型
  13. gispro发布vectortile笔记
  14. 如何将Mac系统OS X Yosemite装到外部磁盘?(转)
  15. zabbix 服务器设置邮件报警
  16. ABAP-BarCode-2-Excel打印二维码
  17. 基于 Lucene 的桌面文件搜索
  18. java 多线程 day16 CountDownLatch 倒计时计数器
  19. C语言编程的两个工具:valgrind和core
  20. Java基础部分全套教程.

热门文章

  1. Where does Windows store MSI files for uninstallation?
  2. 自定义弹出div对话框
  3. rsync与inotify 数据同步
  4. linux(centos)搭建svn
  5. Maya QT interfaces in a class
  6. Oracle表添加主键、外键
  7. 关于《一步步学习ASP.NET MVC3》系列发布时间的说明
  8. matlab vs python
  9. tomcat session思考
  10. 388A Fox and Box Accumulation