補充
豆知識(まめちしき):豆知識是日語中的一個說法,指一些日常生活中鮮為人知但又實用的小竅門。毎日ひとつ胁镐、豆知識ラララ:每天get一點豆知識啦啦啦~
背景
今天調(diào)試socket遇到不少坑参袱,主要涉及NSData這里總結(jié)一下相味。
- 拿到socket數(shù)據(jù)后,應(yīng)該首先在NSData情況下處理爷狈,即最原始的16進(jìn)制asc碼數(shù)組的形式下處理植影,待相應(yīng)業(yè)務(wù)處理完畢,再使用```NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
2. NSData其實可以理解為C的char數(shù)組,請牢記OC就是C的一個超集羡微,可以完美兼容C谷饿,下面列舉一些典型代碼,并復(fù)習(xí)一下C妈倔,請看下面代碼:
char *a = "hello, world\0";
//char數(shù)組轉(zhuǎn)NSData,計算長度不能用sizeof(a)哦博投,否則永遠(yuǎn)是char指針?biāo)純?nèi)存大小,32位4B盯蝴,64位8B毅哗。
NSData *hwData = [NSData dataWithBytes:a length:strlen(a)];
NSMutableData *socketDataBuffer = [NSMutableData new];// 初始化
[socketDataBuffer appendData:hwData];// 末尾賦上
char *head = [socketDataBuffer bytes];// 獲取socketDataBuffer首地址
int len = [socketDataBuffer length];//計算socketDataBuffer數(shù)組長度,以char單位(bytes)計结洼。
char *tail = head + len;//獲取socketDataBuffer末地址之后那個黎做,這里是'\0'
char buf[20];
int size = (tail - head)/(sizeof(char));
memset(buf, 0, sizeof(buf));//清0
memcpy(buf, head, size);//安全拷貝內(nèi)存數(shù)據(jù)叉跛,注意如果用strncpy遇到\x00就不拷貝了喲松忍,是坑哦。
NSData *cellData = [NSData dataWithBytes:buf length:size];//截取出"hello, world"
NSString *cellString = [[NSString alloc] initWithData:cellData encoding:NSUTF8StringEncoding];//NSData轉(zhuǎn)NSString
###總結(jié)
其實就只有一句話:C是基礎(chǔ)筷厘,學(xué)好它鸣峭!
感謝閱讀宏所,希望對您有所幫助!如果有用歡迎轉(zhuǎn)載摊溶,請注明出處爬骤,您的支持是我不斷更新的動力。