iOS中int與NSData互轉(zhuǎn)以及大小端模式

一蠢沿、起因

在使用Socket編程發(fā)送包頭給服務(wù)器時(shí)苛吱,需要把int類型數(shù)據(jù)包裝成NSData類型屹电。

二盟庞、方案

  • 方案1(調(diào)用系統(tǒng)API-推薦)
// OC版
// int轉(zhuǎn)NSData
int a = 123;
NSData *data = [NSData dataWithBytes:&a length:sizeof(a)];
// NSData轉(zhuǎn)int
int b = 0;
[data getBytes:&b length:sizeof(a)];
// Swift版
var a : Int = 123
let data = NSData(bytes: &a, length: 4)
var b : Int = 0
data.getBytes(&b, length: 4)
  • 方案2(字符串中轉(zhuǎn)-效率差)
int num1 = 123;
NSString *str1 = [NSString stringWithFormat:@"%d", num1];
NSData *data = [str1 dataUsingEncoding:NSUTF8StringEncoding];
NSString *str2 = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
int num2 = (int)[str2 integerValue];
  • 方案3(自定義方法-有問(wèn)題)
// NSData轉(zhuǎn)int
- (int)data2Int:(NSData *)data{
    Byte *byte = (Byte *)[data bytes];
    // 有大小端模式問(wèn)題吃沪?
     return (byte[0] << 24) + (byte[1] << 16) + (byte[2] << 8) + (byte[3]); 
}

// int轉(zhuǎn)NSData
- (NSData *)int2Data:(int)i{
    Byte b0 = i & 0xff;
    Byte b1 = i >> 8 & 0xff;
    Byte b2 = i >> 16 & 0xff;
    Byte b3 = i >> 24 & 0xff;
    // 有大小端模式問(wèn)題?
    Byte result[] = {b0, b1, b2, b3};
    return [NSData dataWithBytes:result length:sizeof(result)];
}

三什猖、附:大小端模式

  • 名詞解釋
大端模式:是指數(shù)據(jù)的高字節(jié)保存在內(nèi)存的低地址中票彪,而低子節(jié)數(shù)據(jù)保存在內(nèi)存的高地址中。
小端模式:是指數(shù)據(jù)的高字節(jié)保存在內(nèi)存的高地址中不狮,而數(shù)據(jù)的低字節(jié)保存在內(nèi)存的低地址中降铸。
  • 為什么會(huì)有大小端模式?
處理器(例如32位或者64位的cpu)的發(fā)展摇零。
ARM芯片(iPhone)默認(rèn)采用小端推掸。
  • 驗(yàn)證代碼

驗(yàn)證方式1:(強(qiáng)轉(zhuǎn))

short int a = 0x1122;     // 十進(jìn)制為4386,其中11稱為高子節(jié)(即15~8位)驻仅。
char b = ((char *)&a)[0]; // 取變量a的低子節(jié)(即7~0位)
printf("%x", b);          // 輸出22代表編譯器為小端模式

驗(yàn)證方式2:(便于理解)

int num = 0x12123678;                   // 十進(jìn)制為305419896
char a = num & 0xff;                    // 取(0 ~ 7位)一個(gè)子節(jié)
char b = num >> 8 & 0xff;               // 取(8 ~15位)一個(gè)子節(jié)
char c = num >> 16 & 0xff;              // 取(16~23位)一個(gè)子節(jié)
char d = num >> 24 & 0xff;              // 取(24~31位)一個(gè)子節(jié)
printf("%x, %x, %x, %x", a, b, c, d);   // 小端模式將輸出78,56,34,12

驗(yàn)證方式3:(利用共同體特性)

代碼參考下面推薦的文章(嵌入式)
  • 文章推薦
《詳解大端模式和小端模式》
http://blog.csdn.net/ce123_zhouwei/article/details/6971544
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末谅畅,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子噪服,更是在濱河造成了極大的恐慌毡泻,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粘优,死亡現(xiàn)場(chǎng)離奇詭異仇味,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)雹顺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門丹墨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人嬉愧,你說(shuō)我怎么就攤上這事贩挣。” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵揽惹,是天一觀的道長(zhǎng)被饿。 經(jīng)常有香客問(wèn)我,道長(zhǎng)搪搏,這世上最難降的妖魔是什么狭握? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮疯溺,結(jié)果婚禮上论颅,老公的妹妹穿的比我還像新娘。我一直安慰自己囱嫩,他們只是感情好恃疯,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著墨闲,像睡著了一般今妄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鸳碧,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天盾鳞,我揣著相機(jī)與錄音,去河邊找鬼瞻离。 笑死腾仅,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的套利。 我是一名探鬼主播推励,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼肉迫!你這毒婦竟也來(lái)了验辞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤昂拂,失蹤者是張志新(化名)和其女友劉穎受神,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體格侯,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鼻听,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了联四。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片撑碴。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖朝墩,靈堂內(nèi)的尸體忽然破棺而出醉拓,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布亿卤,位于F島的核電站愤兵,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏排吴。R本人自食惡果不足惜秆乳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望钻哩。 院中可真熱鬧屹堰,春花似錦、人聲如沸街氢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)珊肃。三九已至荣刑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間近范,已是汗流浹背嘶摊。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留评矩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓阱飘,卻偏偏與公主長(zhǎng)得像斥杜,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子沥匈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

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

  • iPhone的標(biāo)準(zhǔn)推薦是CFNetwork 庫(kù)編程蔗喂,其封裝好的開源庫(kù)是 cocoa AsyncSocket庫(kù),用它...
    Ethan_Struggle閱讀 2,247評(píng)論 2 12
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理高帖,服務(wù)發(fā)現(xiàn)缰儿,斷路器,智...
    卡卡羅2017閱讀 134,711評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,309評(píng)論 25 707
  • 18歲散址,林秋生第一次出遠(yuǎn)門乖阵。 往年秋收后,父親和村里幾人結(jié)伴去外市的林場(chǎng)干活预麸。以前都是和哥哥一起瞪浸,今年哥哥結(jié)婚,分...
    清水小和尚閱讀 995評(píng)論 3 7
  • 意識(shí)到自己不能再陷下去吏祸,現(xiàn)階段應(yīng)以努力工作增加學(xué)識(shí)能力為重对蒲,我決定還是去到佛山聽課,畢竟換一座城換一種心情,這也是...
    彭彭吃草莓閱讀 145評(píng)論 0 0