NSData類型介紹(一)

? ? ?? NSData:(官方文檔描述:A byte buffer in memory)瞭恰。

?????? 遵循NSCopying NSCoding協(xié)議,它提供面向?qū)ο蟮臄?shù)組存儲為字節(jié) , 適用與讀寫文件蟋字,而讀寫文件的時候需要一個緩沖區(qū)嫌松,而NSData就提供了這么一個緩存區(qū) 。

什么鬼痘括,太書面了,還是看不懂滔吠,那我們就從最基本的NSString -> NSData一探究竟纲菌!


一.首先介紹幾個編碼表/字符集

??????? 1). ASCII碼表

???? (American Standard Code for Information Interchange,美國信息交換標(biāo)準(zhǔn)代碼)是基于拉丁字母的一套電腦編碼系統(tǒng)疮绷,主要用于顯示現(xiàn)代英語和其他西歐語言翰舌。它是現(xiàn)今最通用的單字節(jié)編碼系統(tǒng),并等同于國際標(biāo)準(zhǔn)ISO/IEC 646矗愧。

??????? 2).Unicode碼

? ? ? ? Unicode只有一個字符集灶芝,中、日唉韭、韓的三種文字占用了Unicode中0x3000到0x9FFF的部分? Unicode目前普遍采用的是UCS-2,它用兩個字節(jié)來編碼一個字符,包括英文字符夜涕, 比如漢字"經(jīng)"的編碼是0x7ECF,注意字符碼一般用十六進制來 表示,為了與十進制區(qū)分属愤,十六進制以0x開頭女器,0x7ECF轉(zhuǎn)換成十進制 就是32463,UCS-2用兩個字節(jié)來編碼字符,兩個字節(jié)就是16位二進制住诸, 2的16次方等于65536,所以UCS-2最多能編碼65536個字符驾胆。 編碼從0到127的字符與ASCII編碼的字符一樣涣澡,比如字母"a"的Unicode 編碼是0x0061,十進制是97,而"a"的ASCII編碼是0x61,十進制也是97, 對于漢字的編碼,事實上Unicode對漢字支持不怎么好丧诺,這也是沒辦法的入桂, 簡體和繁體總共有六七萬個漢字,而UCS-2最多能表示65536個驳阎,才六萬 多個抗愁,所以Unicode只能排除一些幾乎不用的漢字,好在常用的簡體漢字 也不過七千多個呵晚,為了能表示所有漢字蜘腌,Unicode也有UCS-4規(guī)范,就是用 4個字節(jié)來編碼字符饵隙。目前撮珠,在網(wǎng)絡(luò)、Windows系統(tǒng)和很多大型軟件中得到應(yīng)用金矛。


?????? 3).UTF-8

? ? (8-bit Unicode Transformation Format)是一種針對Unicode的可變長度字符編碼芯急,又稱萬國碼。由KenThompson于1992年創(chuàng)建”疗猓現(xiàn)在已經(jīng)標(biāo)準(zhǔn)化為RFC3629志于。UTF-8用1到6個字節(jié)編碼Unicode字符。用在網(wǎng)頁上可以統(tǒng)一頁面顯示中文簡體繁體及其它語言(如英文废睦,日文伺绽,韓文)。但是嗜湃,Unicode支持歐洲奈应、非洲、中東购披、亞洲(包括統(tǒng)一標(biāo)準(zhǔn)的東亞象形漢字和韓國表音文字, Unicode并沒有提供對諸如Braille,Cherokee, Ethiopic, Khmer, Mongolian, Hmong, Tai Lu, Tai Mau文字的支持杖挣。同時它也不支持如Ahom, Akkadian, Aramaic,BabylonianCuneiform, Balti, Brahmi, Etruscan, Hittite, Javanese, Numidian, Old Persian Cuneiform, Syrian之類的古老文字。UTF-8一般用三個字節(jié)來編碼一個漢字刚陡,一個字節(jié)來編碼英文

????? 簡單理解:? ASCII碼是基礎(chǔ)惩妇,Unicode和UTF-8是擴展, 且UTF-8覆蓋面更廣。




二.上代碼講解

?1.NSString ->NSData

NSString *testString = @"123我經(jīng)";

NSData *testData = [testString dataUsingEncoding: NSUTF8StringEncoding];

NSLog(@"-testData:%@--%ld", testData, testData.length);

日志輸出:<313233e6 8891e7bb 8f>-長度:9

分析:

? ? ? ? 依照上面介紹的碼表筐乳,單字符1歌殃,2,3在utf-8編碼占1個字節(jié)蝙云,漢字字符utf-8編碼占3個字節(jié)氓皱,那么剛好長度為9個字節(jié)。

那<313233e6 8891e7bb 8f>這些是什么東西,那我們繼續(xù)執(zhí)行以下代碼

Byte *testByte = (Byte *)[testData bytes];

for(int i=0;i<[testData length];i++){

??????? printf("testByte = %d\n----%ld",testByte[i], sizeof(testByte[i]));

}

輸出日志:

--1--testByte = 49

--1--testByte = 50

--1--testByte = 51

--1--testByte = 230

--1--testByte = 136

--1--testByte = 145

--1--testByte = 231

--1--testByte = 187

--1--testByte = 143

??????? 根據(jù)ACSII碼表可以發(fā)現(xiàn)上面打印出來的就是10進制的字符 1波材,2股淡,3; 再看剛剛打印的NSData *testData <313233e6 8891e7bb 8f>不難看出廷区,31唯灵,32,33其實就是字符1隙轻,2早敬,3的16進制表示形式。

所以得出結(jié)論:NSData里面存的數(shù)據(jù)就是字節(jié)流大脉,4個字節(jié)會有一個空格,但是并不是按10進制存的水孩,是轉(zhuǎn)為了16進制镰矿。


擴展:

剛剛打印*testByte時,該指針指向的是存字節(jié)Byte的數(shù)組俘种,
Byte:是計算機信息技術(shù)用于計量存儲容量的一種計量單位秤标,范圍 0~255(10進制),其實就是unsigned char(無符號字符類型)宙刘。轉(zhuǎn)換如下:

typedef unsigned char? ? ? ? ? ? ? ? ? UInt8;

typedef UInt8? ? ? ? ? ? ? ? ? ? ? ? ? Byte;


那后面的漢字 “我經(jīng)”通過找一個utf-8的解碼工具看看:


看到了吧:-testData:<313233e6 8891e7bb 8f>是不是與上圖剛好吻合苍姜。




到此已經(jīng)把NSString轉(zhuǎn)NSData的過程講完了,我們改一下代碼悬包,使用unicode編碼嘗試看看衙猪。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市布近,隨后出現(xiàn)的幾起案子垫释,更是在濱河造成了極大的恐慌,老刑警劉巖撑瞧,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件棵譬,死亡現(xiàn)場離奇詭異,居然都是意外死亡预伺,警方通過查閱死者的電腦和手機订咸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酬诀,“玉大人脏嚷,你說我怎么就攤上這事×侠模” “怎么了然眼?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長葵腹。 經(jīng)常有香客問我高每,道長屿岂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任鲸匿,我火速辦了婚禮爷怀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘带欢。我一直安慰自己运授,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布乔煞。 她就那樣靜靜地躺著吁朦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪渡贾。 梳的紋絲不亂的頭發(fā)上逗宜,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天,我揣著相機與錄音空骚,去河邊找鬼纺讲。 笑死,一個胖子當(dāng)著我的面吹牛囤屹,可吹牛的內(nèi)容都是我干的熬甚。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼肋坚,長吁一口氣:“原來是場噩夢啊……” “哼乡括!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起冲簿,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤粟判,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后峦剔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體档礁,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年吝沫,在試婚紗的時候發(fā)現(xiàn)自己被綠了呻澜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡惨险,死狀恐怖羹幸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情辫愉,我是刑警寧澤栅受,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響屏镊,放射性物質(zhì)發(fā)生泄漏依疼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一而芥、第九天 我趴在偏房一處隱蔽的房頂上張望律罢。 院中可真熱鬧,春花似錦棍丐、人聲如沸误辑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽巾钉。三九已至,卻和暖如春秘案,著一層夾襖步出監(jiān)牢的瞬間睛琳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工踏烙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人历等。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓讨惩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親寒屯。 傳聞我的和親對象是個殘疾皇子荐捻,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,554評論 2 349

推薦閱讀更多精彩內(nèi)容