cocoa二進位制資料程式設計

2021-06-08 08:41:57 字數 3998 閱讀 1996

資料物件(data object):

二進位制資料能被包裝進foundation和core foundation資料物件中,資料物件提供了運算元據的物件導向封裝。

資料物件是橋接物件(bridged objects),所以你能在foundation和core foundation中自由切換。資料物件

能自動的分配和**資料緩衝區。資料物件(data objects)還能被儲存在集合中,能被寫入屬性列表,存入檔案,通過通訊埠傳輸等。

資料物件的應用:

從原始位元組(raw bytes)建立資料物件

一般用以data開頭的nsdata或nsmutabledata類方法建立包含這些原始位元組的資料物件。

從檔案和urls中建立物件:

datawithcontentsoffile:ordatawithcontentsofurl:類方法建立資料物件,資料物件中包含檔案或者url的內容

nsstring *thepath = @"/u/smith/myfile.txt";

nsdata *mydata = [nsdata datawithcontentsoffile:thepath];

訪問和比較位元組:

nsdata的兩個原始bytes和length方法為類的其他方法提供了基礎。

bytes返回乙個指向包含資料的資料物件。length方法返回資料物件包含的位元組數量。

nsdata提供了從乙個資料物件中訪問位元組或者拷貝位元組到指定緩衝區的方法。getbytes:方法拷貝所有的

位元組到乙個緩衝區。

unsigned char abuffer[20];

nsstring *mystring = @"test string.";

const char *utfstring = [mystring utf8string];

nsdata *mydata = [nsdata datawithbytes: utfstring length: strlen(utfstring)];

[mydata getbytes:abuffer];

抽取乙個資料物件的內容是否是另外資料物件的子集:

nsstring *mystring = @"abcdefg";

const char *utfstring = [mystring utf8string];

nsrange range = ;

nsdata *data1, *data2;

data1 = [nsdata datawithbytes:utfstring length:strlen(utfstring)];

data2 = [data1 subdatawithrange:range];

儲存資料物件:

writetofile:atomically:把資料儲存到乙個本地檔案中writetourl:atomically:把資料儲存到指定的網路地方。

可變資料物件:nsmutabledata

改變bytes

nsmutabledata *data1, *data2;

nsstring *mystring = @"string for data1";

nsstring *yourstring = @"string for data2";

const char *utfmystring = [mystring utf8string];

const char *utfyourstring = [yourstring utf8string];

unsigned char *firstbuffer, secondbuffer[20];

/* initialize data1, data2, and secondbuffer... */

data1 = [nsmutabledata datawithbytes:utfmystring length:strlen(utfmystring)+1];

data2 = [nsmutabledata datawithbytes:utfyourstring length:strlen(utfyourstring)+1];

[data2 getbytes:secondbuffer];

nslog(@"data2 before: \"%s\"\n", (char *)secondbuffer);

firstbuffer = [data2 mutablebytes];

[data1 getbytes:firstbuffer];

nslog(@"data1: \"%s\"\n", (char *)firstbuffer);

[data2 getbytes:secondbuffer];

nslog(@"data2 after: \"%s\"\n", (char *)secondbuffer);

在bytes後加入

nsmutabledata *data1, *data2;

nsstring *firststring = @"abcd";

nsstring *secondstring = @"efgh";

const char *utffirststring = [firststring utf8string];

const char *utfsecondstring = [secondstring utf8string];

unsigned char *abuffer;

unsigned len;

data1 = [nsmutabledata datawithbytes:utffirststring length:strlen(utffirststring)];

data2 = [nsmutabledata datawithbytes:utfsecondstring length:strlen(utfsecondstring)];

len = [data2 length];

abuffer = malloc(len);

[data2 getbytes:abuffer];

置換bytes

nsmutabledata *data1, *data2;

nsstring *mystring = @"liz and john";

nsstring *yourstring = @"larry";

const char *utfmystring = [mystring utf8string];

const char *utfyourstring = [yourstring utf8string];

unsigned len;

unsigned char *abuffer;

nsrange range = ;

data1 = [nsmutabledata datawithbytes:utfmystring length:strlen(utfmystring)];

data2 = [nsmutabledata datawithbytes:utfyourstring length:strlen(utfyourstring)];

len = [data2 length];

abuffer = malloc(len);

[data2 getbytes:abuffer];

[data1 replacebytesinrange:range withbytes:abuffer];

二進位制 二進位制起源

現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...

二進位制資料

今天的問題是處理。本來想在資料庫中只存儲存路徑的,但是同組的同事說別那樣,還是直接存比較好,雖然不知道為什麼一定要存,但是或許他說的有道理吧,至於為什麼暫時還沒想通。處理二進位制遇到的第乙個問題是讀寫的問題,data open filepath,rb data open filepath,wb 作為...

判斷二進位製半整數(二進位制)

10年後,tokitsukaze大佬已經變成了年收入超百萬的的精英程式設計師,家裡沒錢也沒礦的teitoku,找tokitsukaze大佬借1000塊錢,然後tokitsukaze大佬說,借你1024吧,湊個整數。沒錯在2進製下1024是 二進位制整數 乙個正整數滿足其值為2的k次方 k為正整數 我...