代码语言:javascript复制
//
// main.m
// TestNSData&NSDate
//
// Created by ibokan on 14-8-10.
// Copyright (c) 2014年 杨斌. All rights reserved.
//
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
char *str="A C string!";
char *str2="B C string!";
char *str3="C C string";
NSData *data1=[NSData dataWithBytes:str length:strlen(str) 1];//创建不可变的字节对象
NSLog(@"不可变的data1的字节是:%@",data1);//输出十六进制的ASCII编码,当然要加上最后的字符串的结尾符号,所以长度要加一
NSLog(@"不可变的data1的长度是:%d,输出指针:%s",[data1 length],[data1 bytes]);//length是字节的长度,bytes是返回一个指针
NSData *data2=[NSData dataWithBytes:str2 length:strlen(str2) 1];//用于追加到可变G的mdata的中间对象
NSMutableData *mdata=[NSMutableData dataWithBytes:str3 length:strlen(str3) 1];
[mdata appendData:data2];//追加data对象
[mdata appendBytes:str length:strlen(str) 1];//2.追加字符串
NSLog(@"可变的字节对象:%@",mdata);
}
return 0;
}
输出结果:
2014-08-10 17:19:46.795 TestNSData&NSDate[1214:303] 不可变的data1的字节是:<41204320 73747269 6e672100>
2014-08-10 17:19:46.805 TestNSData&NSDate[1214:303] 不可变的data1的长度是:12,输出指针:A C string!
2014-08-10 17:19:46.805 TestNSData&NSDate[1214:303] 可变的字节对象:<43204320 73747269 6e670042 20432073 7472696e 67210041 20432073 7472696e 672100>
Program ended with exit code: 0
结果的说明:输出的data对象实际上是ASCII码的组合,每两个十六进制数字代表一个字母或者其他的ASCII字符的ASCII值,计算出
x41输出的开头可以看出A的ASCII码是65对应的十六进制是41,空格则是x20,十进制的ASCII是32!
strlen(str) 1是因为字符串最后的结尾符并未被计算成字符所以得加上一,’ ’的ASCII是00;
NSMutableData是NSData的子类